libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
LibXR::EulerAngle< Scalar > Class Template Reference

表示欧拉角的类,用于描述3D旋转。Class representing Euler angles for 3D rotation. More...

#include <transform.hpp>

Public Member Functions

 EulerAngle ()
 默认构造函数,初始化所有角度为零。Default constructor initializing all angles to zero.
 
 EulerAngle (Scalar roll, Scalar pitch, Scalar yaw)
 使用指定角度构造欧拉角对象。Constructs an Euler angle object with given angles.
 
 EulerAngle (const Eigen::Matrix< Scalar, 3, 1 > &p)
 通过 Eigen 3D 向量构造欧拉角对象。Constructs an Euler angle object using an Eigen 3D vector.
 
 EulerAngle (const EulerAngle &p)
 拷贝构造函数。Copy constructor.
 
const ScalarRoll () const
 
const ScalarPitch () const
 
const ScalarYaw () const
 
template<typename T , std::enable_if_t< std::is_same< T, Scalar >::value||std::is_same< T, float >::value||std::is_same< T, double >::value, int > = 0>
 EulerAngle (const T(&data)[3])
 通过 3 元素数组构造欧拉角对象。Constructs an Euler angle object using a 3-element array.
 
 operator Eigen::Matrix< Scalar, 3, 1 > () const
 转换为 Eigen 3D 向量。Converts to an Eigen 3D vector.
 
Scalar operator() (int i) const
 获取欧拉角的某个分量。Retrieves a specific Euler angle component.
 
EulerAngleoperator= (const Eigen::Matrix< Scalar, 3, 1 > &p)
 赋值运算符,从 Eigen 3D 向量赋值。Assignment operator from an Eigen 3D vector.
 
EulerAngleoperator= (const EulerAngle &p)
 赋值运算符,从另一个 EulerAngle 赋值。Assignment operator from another EulerAngle.
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrix () const
 转换为旋转矩阵,默认使用 ZYX 顺序。Converts to a rotation matrix using the ZYX order by default.
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixZYX () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixZXY () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixYXZ () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixYZX () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixXYZ () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixXZY () const
 
Eigen::Quaternion< ScalarToQuaternion () const
 
Eigen::Quaternion< ScalarToQuaternionXYZ () const
 转换为四元数,默认使用 ZYX 顺序。Converts to a quaternion using the ZYX order by default.
 
Eigen::Quaternion< ScalarToQuaternionXZY () const
 
Eigen::Quaternion< ScalarToQuaternionYXZ () const
 
Eigen::Quaternion< ScalarToQuaternionYZX () const
 
Eigen::Quaternion< ScalarToQuaternionZXY () const
 
Eigen::Quaternion< ScalarToQuaternionZYX () const
 

Data Fields

Scalar data_ [3]
 存储欧拉角的数组。Array storing Euler angles.
 

Detailed Description

template<typename Scalar>
class LibXR::EulerAngle< Scalar >

表示欧拉角的类,用于描述3D旋转。Class representing Euler angles for 3D rotation.

Template Parameters
Scalar数据类型,如 float 或 double。Data type, such as float or double.

Definition at line 339 of file transform.hpp.

Constructor & Destructor Documentation

◆ EulerAngle() [1/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( )
inline

默认构造函数,初始化所有角度为零。Default constructor initializing all angles to zero.

Definition at line 346 of file transform.hpp.

346: data_{0, 0, 0} {}
Scalar data_[3]
存储欧拉角的数组。Array storing Euler angles.

◆ EulerAngle() [2/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( Scalar  roll,
Scalar  pitch,
Scalar  yaw 
)
inline

使用指定角度构造欧拉角对象。Constructs an Euler angle object with given angles.

Parameters
roll绕 X 轴的角度。Angle about the X-axis.
pitch绕 Y 轴的角度。Angle about the Y-axis.
yaw绕 Z 轴的角度。Angle about the Z-axis.

Definition at line 355 of file transform.hpp.

355: data_{roll, pitch, yaw} {}
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值

◆ EulerAngle() [3/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( const Eigen::Matrix< Scalar, 3, 1 > &  p)
inline

通过 Eigen 3D 向量构造欧拉角对象。Constructs an Euler angle object using an Eigen 3D vector.

Parameters
p含有 (roll, pitch, yaw) 的向量。Vector containing (roll, pitch, yaw).

Definition at line 362 of file transform.hpp.

362: data_{p.x(), p.y(), p.z()} {}

◆ EulerAngle() [4/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( const EulerAngle< Scalar > &  p)
inline

拷贝构造函数。Copy constructor.

Parameters
p另一个 EulerAngle 对象。Another EulerAngle object.

Definition at line 368 of file transform.hpp.

368: data_{p.data_[0], p.data_[1], p.data_[2]} {}

◆ EulerAngle() [5/5]

template<typename Scalar >
template<typename T , std::enable_if_t< std::is_same< T, Scalar >::value||std::is_same< T, float >::value||std::is_same< T, double >::value, int > = 0>
LibXR::EulerAngle< Scalar >::EulerAngle ( const T(&)  data[3])
inline

通过 3 元素数组构造欧拉角对象。Constructs an Euler angle object using a 3-element array.

Template Parameters
T数据类型,支持 Scalar、float 或 double。Data type, supporting Scalar, float, or double.
Parameters
data存储 (roll, pitch, yaw) 的数组。Array storing (roll, pitch, yaw).

Definition at line 385 of file transform.hpp.

385 : data_{data[0], data[1], data[2]}
386 {
387 }

Member Function Documentation

◆ operator Eigen::Matrix< Scalar, 3, 1 >()

template<typename Scalar >
LibXR::EulerAngle< Scalar >::operator Eigen::Matrix< Scalar, 3, 1 > ( ) const
inline

转换为 Eigen 3D 向量。Converts to an Eigen 3D vector.

Definition at line 390 of file transform.hpp.

391 {
392 return Eigen::Map<const Eigen::Matrix<Scalar, 3, 1>>(data_);
393 }

◆ operator()()

template<typename Scalar >
Scalar LibXR::EulerAngle< Scalar >::operator() ( int  i) const
inline

获取欧拉角的某个分量。Retrieves a specific Euler angle component.

Definition at line 396 of file transform.hpp.

396{ return data_[i]; }

◆ operator=() [1/2]

template<typename Scalar >
EulerAngle & LibXR::EulerAngle< Scalar >::operator= ( const Eigen::Matrix< Scalar, 3, 1 > &  p)
inline

赋值运算符,从 Eigen 3D 向量赋值。Assignment operator from an Eigen 3D vector.

Definition at line 400 of file transform.hpp.

401 {
402 data_[0] = p(0);
403 data_[1] = p(1);
404 data_[2] = p(2);
405 return *this;
406 }

◆ operator=() [2/2]

赋值运算符,从另一个 EulerAngle 赋值。Assignment operator from another EulerAngle.

Definition at line 410 of file transform.hpp.

411 {
412 if (this != &p)
413 {
414 memcpy(data_, p.data_, 3 * sizeof(Scalar));
415 }
416 return *this;
417 }

◆ Pitch()

template<typename Scalar >
const Scalar & LibXR::EulerAngle< Scalar >::Pitch ( ) const
inline

Definition at line 371 of file transform.hpp.

371{ return data_[1]; }

◆ Roll()

template<typename Scalar >
const Scalar & LibXR::EulerAngle< Scalar >::Roll ( ) const
inline

Definition at line 370 of file transform.hpp.

370{ return data_[0]; }

◆ ToQuaternion()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternion ( ) const
inline

Definition at line 489 of file transform.hpp.

489{ return ToQuaternionZYX(); }

◆ ToQuaternionXYZ()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionXYZ ( ) const
inline

转换为四元数,默认使用 ZYX 顺序。Converts to a quaternion using the ZYX order by default.

Definition at line 537 of file transform.hpp.

538 {
539 return Eigen::Quaternion<Scalar>(ToRotationMatrixXYZ());
540 }

◆ ToQuaternionXZY()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionXZY ( ) const
inline

Definition at line 542 of file transform.hpp.

543 {
544 return Eigen::Quaternion<Scalar>(ToRotationMatrixXZY());
545 }

◆ ToQuaternionYXZ()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionYXZ ( ) const
inline

Definition at line 547 of file transform.hpp.

548 {
549 return Eigen::Quaternion<Scalar>(ToRotationMatrixYXZ());
550 }

◆ ToQuaternionYZX()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionYZX ( ) const
inline

Definition at line 552 of file transform.hpp.

553 {
554 return Eigen::Quaternion<Scalar>(ToRotationMatrixYZX());
555 }

◆ ToQuaternionZXY()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionZXY ( ) const
inline

Definition at line 557 of file transform.hpp.

558 {
559 return Eigen::Quaternion<Scalar>(ToRotationMatrixZXY());
560 }

◆ ToQuaternionZYX()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionZYX ( ) const
inline

Definition at line 562 of file transform.hpp.

563 {
564 return Eigen::Quaternion<Scalar>(ToRotationMatrixZYX());
565 }

◆ ToRotationMatrix()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrix ( ) const
inline

转换为旋转矩阵,默认使用 ZYX 顺序。Converts to a rotation matrix using the ZYX order by default.

Definition at line 421 of file transform.hpp.

421{ return ToRotationMatrixZYX(); }

◆ ToRotationMatrixXYZ()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixXYZ ( ) const
inline

Definition at line 467 of file transform.hpp.

468 {
469 Scalar ca = std::cos(Roll()), cb = std::cos(Pitch()), cc = std::cos(Yaw());
470 Scalar sa = std::sin(Roll()), sb = std::sin(Pitch()), sc = std::sin(Yaw());
471
472 return (Eigen::Matrix<Scalar, 3, 3>() << cb * cc, -cb * sc, sb,
473 ca * sc + cc * sa * sb, ca * cc - sa * sb * sc, -cb * sa,
474 sa * sc - ca * cc * sb, cc * sa + ca * sb * sc, ca * cb)
475 .finished();
476 }

◆ ToRotationMatrixXZY()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixXZY ( ) const
inline

Definition at line 478 of file transform.hpp.

479 {
480 Scalar ca = std::cos(Roll()), cb = std::cos(Yaw()), cc = std::cos(Pitch());
481 Scalar sa = std::sin(Roll()), sb = std::sin(Yaw()), sc = std::sin(Pitch());
482
483 return (Eigen::Matrix<Scalar, 3, 3>() << cb * cc, -sb, cb * sc,
484 sa * sc + ca * cc * sb, ca * cb, ca * sb * sc - cc * sa,
485 cc * sa * sb - ca * sc, cb * sa, ca * cc + sa * sb * sc)
486 .finished();
487 }

◆ ToRotationMatrixYXZ()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixYXZ ( ) const
inline

Definition at line 445 of file transform.hpp.

446 {
447 Scalar ca = std::cos(Pitch()), cb = std::cos(Roll()), cc = std::cos(Yaw());
448 Scalar sa = std::sin(Pitch()), sb = std::sin(Roll()), sc = std::sin(Yaw());
449
450 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cc + sa * sb * sc,
451 cc * sa * sb - ca * sc, cb * sa, cb * sc, cb * cc, -sb,
452 ca * sb * sc - cc * sa, sa * sc + ca * cc * sb, ca * cb)
453 .finished();
454 }

◆ ToRotationMatrixYZX()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixYZX ( ) const
inline

Definition at line 456 of file transform.hpp.

457 {
458 Scalar ca = std::cos(Pitch()), cb = std::cos(Yaw()), cc = std::cos(Roll());
459 Scalar sa = std::sin(Pitch()), sb = std::sin(Yaw()), sc = std::sin(Roll());
460
461 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cb, sa * sc - ca * cc * sb,
462 cc * sa + ca * sb * sc, sb, cb * cc, -cb * sc, -cb * sa,
463 ca * sc + cc * sa * sb, ca * cc - sa * sb * sc)
464 .finished();
465 }

◆ ToRotationMatrixZXY()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixZXY ( ) const
inline

Definition at line 434 of file transform.hpp.

435 {
436 Scalar ca = std::cos(Yaw()), cb = std::cos(Roll()), cc = std::cos(Pitch());
437 Scalar sa = std::sin(Yaw()), sb = std::sin(Roll()), sc = std::sin(Pitch());
438
439 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cc - sa * sb * sc, -cb * sa,
440 ca * sc + cc * sa * sb, cc * sa + ca * sb * sc, ca * cb,
441 sa * sc - ca * cc * sb, -cb * sc, sb, cb * cc)
442 .finished();
443 }

◆ ToRotationMatrixZYX()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixZYX ( ) const
inline

Definition at line 423 of file transform.hpp.

424 {
425 Scalar ca = std::cos(Yaw()), cb = std::cos(Pitch()), cc = std::cos(Roll());
426 Scalar sa = std::sin(Yaw()), sb = std::sin(Pitch()), sc = std::sin(Roll());
427
428 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cb, ca * sb * sc - cc * sa,
429 sa * sc + ca * cc * sb, cb * sa, ca * cc + sa * sb * sc,
430 cc * sa * sb - ca * sc, -sb, cb * sc, cb * cc)
431 .finished();
432 }

◆ Yaw()

template<typename Scalar >
const Scalar & LibXR::EulerAngle< Scalar >::Yaw ( ) const
inline

Definition at line 372 of file transform.hpp.

372{ return data_[2]; }

Field Documentation

◆ data_

template<typename Scalar >
Scalar LibXR::EulerAngle< Scalar >::data_[3]

存储欧拉角的数组。Array storing Euler angles.

Definition at line 342 of file transform.hpp.


The documentation for this class was generated from the following file: