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 |
|
|
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); |
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 */ |
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); |
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 |
|
|
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 |
|
|
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); |
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 */ |
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; |
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 |