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

Comparing ray/src/common/xf.c (file contents):
Revision 1.6 by greg, Fri Oct 13 19:34:51 1989 UTC vs.
Revision 1.8 by greg, Tue Feb 20 18:02:30 1990 UTC

# Line 26 | Line 26 | char  *av[];
26   {
27          double  atof(), sin(), cos();
28          double  xfmat[4][4], m4[4][4];
29 <        double  xfsca, theta;
29 >        double  xfsca, dtmp;
30          int  i, icnt;
31  
32          setident4(retmat);
33          *retsca = 1.0;
34  
35 +        icnt = 1;
36          setident4(xfmat);
37          xfsca = 1.0;
38  
# Line 52 | Line 53 | char  *av[];
53                          switch (av[i][2]) {
54                          case 'x':
55                                  checkarg(3,1);
56 <                                theta = d2r(atof(av[++i]));
57 <                                m4[1][1] = m4[2][2] = cos(theta);
58 <                                m4[2][1] = -(m4[1][2] = sin(theta));
56 >                                dtmp = d2r(atof(av[++i]));
57 >                                m4[1][1] = m4[2][2] = cos(dtmp);
58 >                                m4[2][1] = -(m4[1][2] = sin(dtmp));
59                                  break;
60                          case 'y':
61                                  checkarg(3,1);
62 <                                theta = d2r(atof(av[++i]));
63 <                                m4[0][0] = m4[2][2] = cos(theta);
64 <                                m4[0][2] = -(m4[2][0] = sin(theta));
62 >                                dtmp = d2r(atof(av[++i]));
63 >                                m4[0][0] = m4[2][2] = cos(dtmp);
64 >                                m4[0][2] = -(m4[2][0] = sin(dtmp));
65                                  break;
66                          case 'z':
67                                  checkarg(3,1);
68 <                                theta = d2r(atof(av[++i]));
69 <                                m4[0][0] = m4[1][1] = cos(theta);
70 <                                m4[1][0] = -(m4[0][1] = sin(theta));
68 >                                dtmp = d2r(atof(av[++i]));
69 >                                m4[0][0] = m4[1][1] = cos(dtmp);
70 >                                m4[1][0] = -(m4[0][1] = sin(dtmp));
71                                  break;
72                          default:
73                                  return(i);
# Line 75 | Line 76 | char  *av[];
76  
77                  case 's':                       /* scale */
78                          checkarg(2,1);
79 +                        dtmp = atof(av[i+1]);
80 +                        if (dtmp == 0.0) goto done;
81 +                        i++;
82                          xfsca *=
83                          m4[0][0] =
84                          m4[1][1] =
85 <                        m4[2][2] = atof(av[++i]);
85 >                        m4[2][2] = dtmp;
86                          break;
87  
88                  case 'm':                       /* mirror */
# Line 105 | Line 109 | char  *av[];
109  
110                  case 'i':                       /* iterate */
111                          checkarg(2,1);
108                        icnt = atoi(av[++i]);
112                          while (icnt-- > 0) {
113                                  multmat4(retmat, retmat, xfmat);
114                                  *retsca *= xfsca;
115                          }
116 +                        icnt = atoi(av[++i]);
117                          setident4(xfmat);
118                          xfsca = 1.0;
119 <                        break;
119 >                        continue;
120  
121                  default:
122                          return(i);
# Line 121 | Line 125 | char  *av[];
125                  multmat4(xfmat, xfmat, m4);
126          }
127   done:
128 <        multmat4(retmat, retmat, xfmat);
129 <        *retsca *= xfsca;
128 >        while (icnt-- > 0) {
129 >                multmat4(retmat, retmat, xfmat);
130 >                *retsca *= xfsca;
131 >        }
132          return(i);
133   }
134  
# Line 137 | Line 143 | char  *av[];
143   {
144          double  atof(), sin(), cos();
145          double  xfmat[4][4], m4[4][4];
146 <        double  xfsca, theta;
146 >        double  xfsca, dtmp;
147          int  i, icnt;
148  
149          setident4(retmat);
150          *retsca = 1.0;
151  
152 +        icnt = 1;
153          setident4(xfmat);
154          xfsca = 1.0;
155  
# Line 163 | Line 170 | char  *av[];
170                          switch (av[i][2]) {
171                          case 'x':
172                                  checkarg(3,1);
173 <                                theta = -d2r(atof(av[++i]));
174 <                                m4[1][1] = m4[2][2] = cos(theta);
175 <                                m4[2][1] = -(m4[1][2] = sin(theta));
173 >                                dtmp = -d2r(atof(av[++i]));
174 >                                m4[1][1] = m4[2][2] = cos(dtmp);
175 >                                m4[2][1] = -(m4[1][2] = sin(dtmp));
176                                  break;
177                          case 'y':
178                                  checkarg(3,1);
179 <                                theta = -d2r(atof(av[++i]));
180 <                                m4[0][0] = m4[2][2] = cos(theta);
181 <                                m4[0][2] = -(m4[2][0] = sin(theta));
179 >                                dtmp = -d2r(atof(av[++i]));
180 >                                m4[0][0] = m4[2][2] = cos(dtmp);
181 >                                m4[0][2] = -(m4[2][0] = sin(dtmp));
182                                  break;
183                          case 'z':
184                                  checkarg(3,1);
185 <                                theta = -d2r(atof(av[++i]));
186 <                                m4[0][0] = m4[1][1] = cos(theta);
187 <                                m4[1][0] = -(m4[0][1] = sin(theta));
185 >                                dtmp = -d2r(atof(av[++i]));
186 >                                m4[0][0] = m4[1][1] = cos(dtmp);
187 >                                m4[1][0] = -(m4[0][1] = sin(dtmp));
188                                  break;
189                          default:
190                                  return(i);
# Line 186 | Line 193 | char  *av[];
193  
194                  case 's':                       /* scale */
195                          checkarg(2,1);
196 +                        dtmp = atof(av[i+1]);
197 +                        if (dtmp == 0.0) goto done;
198 +                        i++;
199                          xfsca *=
200                          m4[0][0] =
201                          m4[1][1] =
202 <                        m4[2][2] = 1.0 / atof(av[++i]);
202 >                        m4[2][2] = 1.0 / dtmp;
203                          break;
204  
205                  case 'm':                       /* mirror */
# Line 216 | Line 226 | char  *av[];
226  
227                  case 'i':                       /* iterate */
228                          checkarg(2,1);
219                        icnt = atoi(av[++i]);
229                          while (icnt-- > 0) {
230                                  multmat4(retmat, xfmat, retmat);
231                                  *retsca *= xfsca;
232                          }
233 +                        icnt = atoi(av[++i]);
234                          setident4(xfmat);
235                          xfsca = 1.0;
236                          break;
# Line 232 | Line 242 | char  *av[];
242                  multmat4(xfmat, m4, xfmat);     /* left multiply */
243          }
244   done:
245 <        multmat4(retmat, xfmat, retmat);
246 <        *retsca *= xfsca;
245 >        while (icnt-- > 0) {
246 >                multmat4(retmat, xfmat, retmat);
247 >                *retsca *= xfsca;
248 >        }
249          return(i);
250   }
251   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines