Lines Matching refs:Scalar

43   typedef _Scalar Scalar;
57 typedef _Scalar Scalar;
60 typedef Matrix<Scalar, 4, 1> Coefficients;
62 typedef Matrix<Scalar,3,1> Vector3;
64 typedef Matrix<Scalar,3,3> Matrix3;
66 typedef AngleAxis<Scalar> AngleAxisType;
69 inline Scalar x() const { return m_coeffs.coeff(0); }
71 inline Scalar y() const { return m_coeffs.coeff(1); }
73 inline Scalar z() const { return m_coeffs.coeff(2); }
75 inline Scalar w() const { return m_coeffs.coeff(3); }
78 inline Scalar& x() { return m_coeffs.coeffRef(0); }
80 inline Scalar& y() { return m_coeffs.coeffRef(1); }
82 inline Scalar& z() { return m_coeffs.coeffRef(2); }
84 inline Scalar& w() { return m_coeffs.coeffRef(3); }
108 inline Quaternion(Scalar w, Scalar x, Scalar y, Scalar z)
142 inline Scalar squaredNorm() const { return m_coeffs.squaredNorm(); }
147 inline Scalar norm() const { return m_coeffs.norm(); }
161 inline Scalar eigen2_dot(const Quaternion& other) const { return m_coeffs.eigen2_dot(other.m_coeffs); }
163 inline Scalar angularDistance(const Quaternion& other) const;
176 Quaternion slerp(Scalar t, const Quaternion& other) const;
193 { m_coeffs = other.coeffs().template cast<Scalar>(); }
199 bool isApprox(const Quaternion& other, typename NumTraits<Scalar>::Real prec = precision<Scalar>()) const
214 template<typename Scalar> inline Quaternion<Scalar>
215 ei_quaternion_product(const Quaternion<Scalar>& a, const Quaternion<Scalar>& b)
217 return Quaternion<Scalar>
227 template <typename Scalar>
228 inline Quaternion<Scalar> Quaternion<Scalar>::operator* (const Quaternion& other) const
234 template <typename Scalar>
235 inline Quaternion<Scalar>& Quaternion<Scalar>::operator*= (const Quaternion& other)
247 template <typename Scalar>
249 inline typename Quaternion<Scalar>::Vector3
250 Quaternion<Scalar>::operator* (const MatrixBase<Derived>& v) const
262 template<typename Scalar>
263 inline Quaternion<Scalar>& Quaternion<Scalar>::operator=(const Quaternion& other)
271 template<typename Scalar>
272 inline Quaternion<Scalar>& Quaternion<Scalar>::operator=(const AngleAxisType& aa)
274 Scalar ha = Scalar(0.5)*aa.angle(); // Scalar(0.5) to suppress precision loss warnings
285 template<typename Scalar>
287 inline Quaternion<Scalar>& Quaternion<Scalar>::operator=(const MatrixBase<Derived>& xpr)
294 template<typename Scalar>
295 inline typename Quaternion<Scalar>::Matrix3
296 Quaternion<Scalar>::toRotationMatrix(void) const
304 const Scalar tx = Scalar(2)*this->x();
305 const Scalar ty = Scalar(2)*this->y();
306 const Scalar tz = Scalar(2)*this->z();
307 const Scalar twx = tx*this->w();
308 const Scalar twy = ty*this->w();
309 const Scalar twz = tz*this->w();
310 const Scalar txx = tx*this->x();
311 const Scalar txy = ty*this->x();
312 const Scalar txz = tz*this->x();
313 const Scalar tyy = ty*this->y();
314 const Scalar tyz = tz*this->y();
315 const Scalar tzz = tz*this->z();
317 res.coeffRef(0,0) = Scalar(1)-(tyy+tzz);
321 res.coeffRef(1,1) = Scalar(1)-(txx+tzz);
325 res.coeffRef(2,2) = Scalar(1)-(txx+tyy);
336 template<typename Scalar>
338 inline Quaternion<Scalar>& Quaternion<Scalar>::setFromTwoVectors(const MatrixBase<Derived1>& a, const MatrixBase<Derived2>& b)
342 Scalar c = v0.eigen2_dot(v1);
345 if (ei_isApprox(c,Scalar(1)))
352 if (ei_isApprox(c,Scalar(-1)))
360 Scalar s = ei_sqrt((Scalar(1)+c)*Scalar(2));
361 Scalar invs = Scalar(1)/s;
363 this->w() = s * Scalar(0.5);
374 template <typename Scalar>
375 inline Quaternion<Scalar> Quaternion<Scalar>::inverse() const
378 Scalar n2 = this->squaredNorm();
394 template <typename Scalar>
395 inline Quaternion<Scalar> Quaternion<Scalar>::conjugate() const
403 template <typename Scalar>
404 inline Scalar Quaternion<Scalar>::angularDistance(const Quaternion& other) const
409 return Scalar(2) * std::acos(d);
415 template <typename Scalar>
416 Quaternion<Scalar> Quaternion<Scalar>::slerp(Scalar t, const Quaternion& other) const
418 static const Scalar one = Scalar(1) - machine_epsilon<Scalar>();
419 Scalar d = this->eigen2_dot(other);
420 Scalar absD = ei_abs(d);
422 Scalar scale0;
423 Scalar scale1;
427 scale0 = Scalar(1) - t;
433 Scalar theta = std::acos(absD);
434 Scalar sinTheta = ei_sin(theta);
436 scale0 = ei_sin( ( Scalar(1) - t ) * theta) / sinTheta;
442 return Quaternion<Scalar>(scale0 * coeffs() + scale1 * other.coeffs());
449 typedef typename Other::Scalar Scalar;
450 static inline void run(Quaternion<Scalar>& q, const Other& mat)
454 Scalar t = mat.trace();
457 t = ei_sqrt(t + Scalar(1.0));
458 q.w() = Scalar(0.5)*t;
459 t = Scalar(0.5)/t;
474 t = ei_sqrt(mat.coeff(i,i)-mat.coeff(j,j)-mat.coeff(k,k) + Scalar(1.0));
475 q.coeffs().coeffRef(i) = Scalar(0.5) * t;
476 t = Scalar(0.5)/t;
488 typedef typename Other::Scalar Scalar;
489 static inline void run(Quaternion<Scalar>& q, const Other& vec)