ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/math/SquareMatrix3.hpp
(Generate patch)

Comparing trunk/OOPSE-2.0/src/math/SquareMatrix3.hpp (file contents):
Revision 2069 by tim, Tue Mar 1 20:10:14 2005 UTC vs.
Revision 2146 by tim, Tue Mar 29 21:00:54 2005 UTC

# 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  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines