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 Scalar & Roll () const
 
const Scalar & Pitch () const
 
const Scalar & Yaw () 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< Scalar > ToQuaternion () const
 
Eigen::Quaternion< Scalar > ToQuaternionXYZ () const
 转换为四元数,默认使用 ZYX 顺序。Converts to a quaternion using the ZYX order by default.
 
Eigen::Quaternion< Scalar > ToQuaternionXZY () const
 
Eigen::Quaternion< Scalar > ToQuaternionYXZ () const
 
Eigen::Quaternion< Scalar > ToQuaternionYZX () const
 
Eigen::Quaternion< Scalar > ToQuaternionZXY () const
 
Eigen::Quaternion< Scalar > ToQuaternionZYX () 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 341 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 348 of file transform.hpp.

348: 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 357 of file transform.hpp.

357: data_{roll, pitch, yaw} {}

◆ 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 364 of file transform.hpp.

364: 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 370 of file transform.hpp.

370: 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 387 of file transform.hpp.

387 : data_{data[0], data[1], data[2]}
388 {
389 }

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 392 of file transform.hpp.

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

◆ operator()()

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

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

Definition at line 398 of file transform.hpp.

398{ 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 402 of file transform.hpp.

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

◆ operator=() [2/2]

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

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

Definition at line 412 of file transform.hpp.

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

◆ Pitch()

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

Definition at line 373 of file transform.hpp.

373{ return data_[1]; }

◆ Roll()

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

Definition at line 372 of file transform.hpp.

372{ return data_[0]; }

◆ ToQuaternion()

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

Definition at line 491 of file transform.hpp.

491{ 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 539 of file transform.hpp.

540 {
541 return Eigen::Quaternion<Scalar>(ToRotationMatrixXYZ());
542 }

◆ ToQuaternionXZY()

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

Definition at line 544 of file transform.hpp.

545 {
546 return Eigen::Quaternion<Scalar>(ToRotationMatrixXZY());
547 }

◆ ToQuaternionYXZ()

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

Definition at line 549 of file transform.hpp.

550 {
551 return Eigen::Quaternion<Scalar>(ToRotationMatrixYXZ());
552 }

◆ ToQuaternionYZX()

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

Definition at line 554 of file transform.hpp.

555 {
556 return Eigen::Quaternion<Scalar>(ToRotationMatrixYZX());
557 }

◆ ToQuaternionZXY()

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

Definition at line 559 of file transform.hpp.

560 {
561 return Eigen::Quaternion<Scalar>(ToRotationMatrixZXY());
562 }

◆ ToQuaternionZYX()

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

Definition at line 564 of file transform.hpp.

565 {
566 return Eigen::Quaternion<Scalar>(ToRotationMatrixZYX());
567 }

◆ 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 423 of file transform.hpp.

423{ return ToRotationMatrixZYX(); }

◆ ToRotationMatrixXYZ()

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

Definition at line 469 of file transform.hpp.

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

◆ ToRotationMatrixXZY()

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

Definition at line 480 of file transform.hpp.

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

◆ ToRotationMatrixYXZ()

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

Definition at line 447 of file transform.hpp.

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

◆ ToRotationMatrixYZX()

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

Definition at line 458 of file transform.hpp.

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

◆ ToRotationMatrixZXY()

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

Definition at line 436 of file transform.hpp.

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

◆ ToRotationMatrixZYX()

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

Definition at line 425 of file transform.hpp.

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

◆ Yaw()

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

Definition at line 374 of file transform.hpp.

374{ return data_[2]; }

Field Documentation

◆ data_

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

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

Definition at line 344 of file transform.hpp.


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