| 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; |