ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/image.c
(Generate patch)

Comparing ray/src/common/image.c (file contents):
Revision 2.52 by greg, Fri Feb 12 00:47:08 2021 UTC vs.
Revision 2.53 by greg, Wed Jan 12 21:07:39 2022 UTC

# Line 63 | Line 63 | VIEW  *v
63                          return(ill_horiz);
64                  if (v->vert >= 180.0-FTINY)
65                          return(ill_vert);
66 <                v->hn2 = 2.0 * tan(v->horiz*(PI/180.0/2.0));
67 <                v->vn2 = 2.0 * tan(v->vert*(PI/180.0/2.0));
66 >                v->hn2 = 2.0 * tan(v->horiz*(PI/360.));
67 >                v->vn2 = 2.0 * tan(v->vert*(PI/360.));
68                  break;
69          case VT_CYL:                            /* cylindrical panorama */
70                  if (v->horiz > 360.0+FTINY)
# Line 72 | Line 72 | VIEW  *v
72                  if (v->vert >= 180.0-FTINY)
73                          return(ill_vert);
74                  v->hn2 = v->horiz * (PI/180.0);
75 <                v->vn2 = 2.0 * tan(v->vert*(PI/180.0/2.0));
75 >                v->vn2 = 2.0 * tan(v->vert*(PI/360.));
76                  break;
77          case VT_ANG:                            /* angular fisheye */
78                  if (v->horiz > 360.0+FTINY)
# Line 87 | Line 87 | VIEW  *v
87                          return(ill_horiz);
88                  if (v->vert > 180.0+FTINY)
89                          return(ill_vert);
90 <                v->hn2 = 2.0 * sin(v->horiz*(PI/180.0/2.0));
91 <                v->vn2 = 2.0 * sin(v->vert*(PI/180.0/2.0));
90 >                v->hn2 = 2.0 * sin(v->horiz*(PI/360.));
91 >                v->vn2 = 2.0 * sin(v->vert*(PI/360.));
92                  break;
93          case VT_PLS:                            /* planispheric fisheye */
94                  if (v->horiz >= 360.0-FTINY)
95                          return(ill_horiz);
96                  if (v->vert >= 360.0-FTINY)
97                          return(ill_vert);
98 <                v->hn2 = 2.*sin(v->horiz*(PI/180.0/2.0)) /
99 <                                (1.0 + cos(v->horiz*(PI/180.0/2.0)));
100 <                v->vn2 = 2.*sin(v->vert*(PI/180.0/2.0)) /
101 <                                (1.0 + cos(v->vert*(PI/180.0/2.0)));
98 >                v->hn2 = 2.*sin(v->horiz*(PI/360.)) /
99 >                                (1.0 + cos(v->horiz*(PI/360.)));
100 >                v->vn2 = 2.*sin(v->vert*(PI/360.)) /
101 >                                (1.0 + cos(v->vert*(PI/360.)));
102                  break;
103          default:
104                  return("unknown view type");
# Line 117 | Line 117 | VIEW  *v
117          v->vn2 *= v->vn2;
118  
119          return(NULL);
120 + }
121 +
122 +
123 + char *
124 + cropview(                       /* crop a view to the indicated bounds */
125 + VIEW *v,
126 + double x0,
127 + double y0,
128 + double x1,
129 + double y1
130 + )
131 + {
132 +        static char     ill_crop[] = "zero crop area";
133 +        static char     ill_hemi[] = "illegal crop for hemispherical view";
134 +        double  d;
135 +                                        /* order crop extrema */
136 +        if (x0 > x1) { d=x0; x0=x1; x1=d; }
137 +        if (y0 > y1) { d=y0; y0=y1; y1=d; }
138 +
139 +        d = x1 - x0;
140 +        if (d == .0)
141 +                return(ill_crop);
142 +        if (!FABSEQ(d, 1.))             /* adjust horizontal size? */
143 +                switch (v->type) {
144 +                case VT_PER:
145 +                        v->horiz = 360./PI*atan( d*tan(PI/360.*v->horiz) );
146 +                        break;
147 +                case VT_PAR:
148 +                case VT_ANG:
149 +                case VT_CYL:
150 +                        v->horiz *= d;
151 +                        break;
152 +                case VT_HEM:
153 +                        d *= sin(PI/360.*v->horiz);
154 +                        if (d > 1.)
155 +                                return(ill_hemi);
156 +                        v->horiz = 360./PI*asin( d );
157 +                        break;
158 +                case VT_PLS:
159 +                        d *= sin(PI/360.*v->horiz) /
160 +                                        (1. + cos(PI/360.*v->horiz));
161 +                        v->horiz = 360./PI*acos( (1. - d*d) / (1. + d*d) );
162 +                        break;
163 +                }
164 +        d = y1 - y0;
165 +        if (d == .0)
166 +                return(ill_crop);
167 +        if (!FABSEQ(d, 1.))             /* adjust vertical size? */
168 +                switch (v->type) {
169 +                case VT_PER:
170 +                case VT_CYL:
171 +                        v->vert = 360./PI*atan( d*tan(PI/360.*v->vert) );
172 +                        break;
173 +                case VT_PAR:
174 +                case VT_ANG:
175 +                        v->vert *= d;
176 +                        break;
177 +                case VT_HEM:
178 +                        d *= sin(PI/360.*v->vert);
179 +                        if (d > 1.)
180 +                                return(ill_hemi);
181 +                        v->vert = 360./PI*asin( d );
182 +                        break;
183 +                case VT_PLS:
184 +                        d *= sin(PI/360.*v->vert) /
185 +                                        (1. + cos(PI/360.*v->vert));
186 +                        v->vert = 360./PI*acos( (1. - d*d) / (1. + d*d) );
187 +                        break;
188 +                }
189 +                                        /* fix offsets */
190 +        v->hoff = ((x0 + x1)*.5 - .5 + v->hoff) / (x1 - x0);
191 +        v->voff = ((y0 + y1)*.5 - .5 + v->voff) / (y1 - y0);
192 +
193 +        return(setview(v));             /* final error checks & set-up */
194   }
195  
196  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines