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.
 
Scalar & Roll () noexcept
 
const Scalar & Roll () const noexcept
 
Scalar & Pitch () noexcept
 
const Scalar & Pitch () const noexcept
 
Scalar & Yaw () noexcept
 
const Scalar & Yaw () const noexcept
 
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 349 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 356 of file transform.hpp.

356: 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 365 of file transform.hpp.

365: 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 372 of file transform.hpp.

372: 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 378 of file transform.hpp.

378: 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 398 of file transform.hpp.

398 : data_{data[0], data[1], data[2]}
399 {
400 }

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

404 {
405 return Eigen::Map<const Eigen::Matrix<Scalar, 3, 1>>(data_);
406 }

◆ operator()()

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

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

Definition at line 409 of file transform.hpp.

409{ 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 413 of file transform.hpp.

414 {
415 data_[0] = p(0);
416 data_[1] = p(1);
417 data_[2] = p(2);
418 return *this;
419 }

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

424 {
425 if (this != &p)
426 {
427 data_[0] = p.data_[0];
428 data_[1] = p.data_[1];
429 data_[2] = p.data_[2];
430 }
431 return *this;
432 }

◆ Pitch() [1/2]

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

Definition at line 383 of file transform.hpp.

383{ return data_[1]; }

◆ Pitch() [2/2]

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

Definition at line 382 of file transform.hpp.

382{ return data_[1]; }

◆ Roll() [1/2]

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

Definition at line 381 of file transform.hpp.

381{ return data_[0]; }

◆ Roll() [2/2]

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

Definition at line 380 of file transform.hpp.

380{ return data_[0]; }

◆ ToQuaternion()

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

Definition at line 504 of file transform.hpp.

504{ 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 552 of file transform.hpp.

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

◆ ToQuaternionXZY()

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

Definition at line 557 of file transform.hpp.

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

◆ ToQuaternionYXZ()

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

Definition at line 562 of file transform.hpp.

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

◆ ToQuaternionYZX()

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

Definition at line 567 of file transform.hpp.

568 {
569 return Eigen::Quaternion<Scalar>(ToRotationMatrixYZX());
570 }

◆ ToQuaternionZXY()

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

Definition at line 572 of file transform.hpp.

573 {
574 return Eigen::Quaternion<Scalar>(ToRotationMatrixZXY());
575 }

◆ ToQuaternionZYX()

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

Definition at line 577 of file transform.hpp.

578 {
579 return Eigen::Quaternion<Scalar>(ToRotationMatrixZYX());
580 }

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

436{ return ToRotationMatrixZYX(); }

◆ ToRotationMatrixXYZ()

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

Definition at line 482 of file transform.hpp.

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

◆ ToRotationMatrixXZY()

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

Definition at line 493 of file transform.hpp.

494 {
495 Scalar ca = std::cos(Roll()), cb = std::cos(Yaw()), cc = std::cos(Pitch());
496 Scalar sa = std::sin(Roll()), sb = std::sin(Yaw()), sc = std::sin(Pitch());
497
498 return (Eigen::Matrix<Scalar, 3, 3>() << cb * cc, -sb, cb * sc,
499 sa * sc + ca * cc * sb, ca * cb, ca * sb * sc - cc * sa,
500 cc * sa * sb - ca * sc, cb * sa, ca * cc + sa * sb * sc)
501 .finished();
502 }

◆ ToRotationMatrixYXZ()

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

Definition at line 460 of file transform.hpp.

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

◆ ToRotationMatrixYZX()

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

Definition at line 471 of file transform.hpp.

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

◆ ToRotationMatrixZXY()

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

Definition at line 449 of file transform.hpp.

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

◆ ToRotationMatrixZYX()

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

Definition at line 438 of file transform.hpp.

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

◆ Yaw() [1/2]

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

Definition at line 385 of file transform.hpp.

385{ return data_[2]; }

◆ Yaw() [2/2]

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

Definition at line 384 of file transform.hpp.

384{ return data_[2]; }

Field Documentation

◆ data_

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

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

Definition at line 352 of file transform.hpp.


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