24 |
|
double q2Sqr; |
25 |
|
double q3Sqr; |
26 |
|
|
27 |
< |
q0Sqr = q.quat[0] * q.quat[0]; |
28 |
< |
q1Sqr = q.quat[1] * q.quat[1]; |
29 |
< |
q2Sqr = q.quat[2] * q.quat[2]; |
30 |
< |
q3Sqr = q.quat[3] * q.quat[3]; |
27 |
> |
q0Sqr = q.x * q.x; |
28 |
> |
q1Sqr = q.y * q.y; |
29 |
> |
q2Sqr = q.z * q.z; |
30 |
> |
q3Sqr = q.w * q.w; |
31 |
|
|
32 |
|
|
33 |
|
element[0][0]= q0Sqr + q1Sqr - q2Sqr - q3Sqr; |
34 |
< |
element[0][1] = 2.0 * ( q.quat[1] * q.quat[2] + q.quat[0] * q.quat[3] ); |
35 |
< |
element[0][2] = 2.0 * ( q.quat[1] * q.quat[3] - q.quat[0] * q.quat[2] ); |
34 |
> |
element[0][1] = 2.0 * ( q.y * q.z + q.x * q.w ); |
35 |
> |
element[0][2] = 2.0 * ( q.y * q.w - q.x * q.z ); |
36 |
|
|
37 |
< |
element[1][0] = 2.0 * ( q.quat[1] * q.quat[2] - q.quat[0] * q.quat[3] ); |
37 |
> |
element[1][0] = 2.0 * ( q.y * q.z - q.x * q.w ); |
38 |
|
element[1][1] = q0Sqr - q1Sqr + q2Sqr - q3Sqr; |
39 |
< |
element[1][2] = 2.0 * ( q.quat[2] * q.quat[3] + q.quat[0] * q.quat[1] ); |
39 |
> |
element[1][2] = 2.0 * ( q.z * q.w + q.x * q.y ); |
40 |
|
|
41 |
< |
element[2][0] = 2.0 * ( q.quat[1] * q.quat[3] + q.quat[0] * q.quat[2] ); |
42 |
< |
element[2][1] = 2.0 * ( q.quat[2] * q.quat[3] - q.quat[0] * q.quat[1] ); |
41 |
> |
element[2][0] = 2.0 * ( q.y * q.w + q.x * q.z ); |
42 |
> |
element[2][1] = 2.0 * ( q.z * q.w - q.x * q.y ); |
43 |
|
element[2][2] = q0Sqr - q1Sqr -q2Sqr +q3Sqr; |
44 |
|
|
45 |
|
} |
142 |
|
if( t > 0.0 ){ |
143 |
|
|
144 |
|
s = 0.5 / sqrt( t ); |
145 |
< |
q.quat[0] = 0.25 / s; |
146 |
< |
q.quat[1] = (element[1][2] - element[2][1]) * s; |
147 |
< |
q.quat[2] = (element[2][0] - element[0][2]) * s; |
148 |
< |
q.quat[3] = (element[0][1] - element[1][0]) * s; |
145 |
> |
q.x = 0.25 / s; |
146 |
> |
q.y = (element[1][2] - element[2][1]) * s; |
147 |
> |
q.z = (element[2][0] - element[0][2]) * s; |
148 |
> |
q.w = (element[0][1] - element[1][0]) * s; |
149 |
|
} |
150 |
|
else{ |
151 |
|
|
155 |
|
|
156 |
|
if( ad1 >= ad2 && ad1 >= ad3 ){ |
157 |
|
s = 2.0 * sqrt( 1.0 + element[0][0] - element[1][1] - element[2][2] ); |
158 |
< |
q.quat[0] = (element[1][2] + element[2][1]) / s; |
159 |
< |
q.quat[1] = 0.5 / s; |
160 |
< |
q.quat[2] = (element[0][1] + element[1][0]) / s; |
161 |
< |
q.quat[3] = (element[0][2] + element[2][0]) / s; |
158 |
> |
q.x = (element[1][2] + element[2][1]) / s; |
159 |
> |
q.y = 0.5 / s; |
160 |
> |
q.z = (element[0][1] + element[1][0]) / s; |
161 |
> |
q.w = (element[0][2] + element[2][0]) / s; |
162 |
|
} |
163 |
|
else if( ad2 >= ad1 && ad2 >= ad3 ){ |
164 |
|
s = sqrt( 1.0 + element[1][1] - element[0][0] - element[2][2] ) * 2.0; |
165 |
< |
q.quat[0] = (element[0][2] + element[2][0]) / s; |
166 |
< |
q.quat[1] = (element[0][1] + element[1][0]) / s; |
167 |
< |
q.quat[2] = 0.5 / s; |
168 |
< |
q.quat[3] = (element[1][2] + element[2][1]) / s; |
165 |
> |
q.x = (element[0][2] + element[2][0]) / s; |
166 |
> |
q.y = (element[0][1] + element[1][0]) / s; |
167 |
> |
q.z = 0.5 / s; |
168 |
> |
q.w = (element[1][2] + element[2][1]) / s; |
169 |
|
} |
170 |
|
else{ |
171 |
|
s = sqrt( 1.0 + element[2][2] - element[0][0] - element[1][1] ) * 2.0; |
172 |
< |
q.quat[0] = (element[0][1] + element[1][0]) / s; |
173 |
< |
q.quat[1] = (element[0][2] + element[2][0]) / s; |
174 |
< |
q.quat[2] = (element[1][2] + element[2][1]) / s; |
175 |
< |
q.quat[3] = 0.5 / s; |
172 |
> |
q.x = (element[0][1] + element[1][0]) / s; |
173 |
> |
q.y = (element[0][2] + element[2][0]) / s; |
174 |
> |
q.z = (element[1][2] + element[2][1]) / s; |
175 |
> |
q.w = 0.5 / s; |
176 |
|
} |
177 |
|
} |
178 |
|
return q; |