# | Line 51 | Line 51 | |
---|---|---|
51 | #include "Quaternion.hpp" | |
52 | #include "SquareMatrix.hpp" | |
53 | #include "Vector3.hpp" | |
54 | < | |
54 | > | #include "utils/NumericConstant.hpp" |
55 | namespace oopse { | |
56 | ||
57 | template<typename Real> | |
# | Line 179 | Line 179 | namespace oopse { | |
179 | Real ad1, ad2, ad3; | |
180 | t = this->data_[0][0] + this->data_[1][1] + this->data_[2][2] + 1.0; | |
181 | ||
182 | < | if( t > 0.0 ){ |
182 | > | if( t > NumericConstant::epsilon ){ |
183 | ||
184 | s = 0.5 / sqrt( t ); | |
185 | q[0] = 0.25 / s; | |
# | Line 194 | Line 194 | namespace oopse { | |
194 | ||
195 | if( ad1 >= ad2 && ad1 >= ad3 ){ | |
196 | ||
197 | < | s = 2.0 * sqrt( 1.0 + this->data_[0][0] - this->data_[1][1] - this->data_[2][2] ); |
198 | < | q[0] = (this->data_[1][2] + this->data_[2][1]) / s; |
199 | < | q[1] = 0.5 / s; |
200 | < | q[2] = (this->data_[0][1] + this->data_[1][0]) / s; |
201 | < | q[3] = (this->data_[0][2] + this->data_[2][0]) / s; |
197 | > | s = 0.5 / sqrt( 1.0 + this->data_[0][0] - this->data_[1][1] - this->data_[2][2] ); |
198 | > | q[0] = (this->data_[1][2] - this->data_[2][1]) * s; |
199 | > | q[1] = 0.25 / s; |
200 | > | q[2] = (this->data_[0][1] + this->data_[1][0]) * s; |
201 | > | q[3] = (this->data_[0][2] + this->data_[2][0]) * s; |
202 | } else if ( ad2 >= ad1 && ad2 >= ad3 ) { | |
203 | < | s = sqrt( 1.0 + this->data_[1][1] - this->data_[0][0] - this->data_[2][2] ) * 2.0; |
204 | < | q[0] = (this->data_[0][2] + this->data_[2][0]) / s; |
205 | < | q[1] = (this->data_[0][1] + this->data_[1][0]) / s; |
206 | < | q[2] = 0.5 / s; |
207 | < | q[3] = (this->data_[1][2] + this->data_[2][1]) / s; |
203 | > | s = 0.5 / sqrt( 1.0 + this->data_[1][1] - this->data_[0][0] - this->data_[2][2] ); |
204 | > | q[0] = (this->data_[2][0] - this->data_[0][2] ) * s; |
205 | > | q[1] = (this->data_[0][1] + this->data_[1][0]) * s; |
206 | > | q[2] = 0.25 / s; |
207 | > | q[3] = (this->data_[1][2] + this->data_[2][1]) * s; |
208 | } else { | |
209 | ||
210 | < | s = sqrt( 1.0 + this->data_[2][2] - this->data_[0][0] - this->data_[1][1] ) * 2.0; |
211 | < | q[0] = (this->data_[0][1] + this->data_[1][0]) / s; |
212 | < | q[1] = (this->data_[0][2] + this->data_[2][0]) / s; |
213 | < | q[2] = (this->data_[1][2] + this->data_[2][1]) / s; |
214 | < | q[3] = 0.5 / s; |
210 | > | s = 0.5 / sqrt( 1.0 + this->data_[2][2] - this->data_[0][0] - this->data_[1][1] ); |
211 | > | q[0] = (this->data_[0][1] - this->data_[1][0]) * s; |
212 | > | q[1] = (this->data_[0][2] + this->data_[2][0]) * s; |
213 | > | q[2] = (this->data_[1][2] + this->data_[2][1]) * s; |
214 | > | q[3] = 0.25 / s; |
215 | } | |
216 | } | |
217 |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |