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

三维空间中的位置向量 / 3D position vector More...

#include <transform.hpp>

Inheritance diagram for LibXR::Position< Scalar >:
Collaboration diagram for LibXR::Position< Scalar >:

Public Member Functions

 Position ()
 默认构造函数,初始化为 (0,0,0) / Default constructor initializing to (0,0,0)
 
 Position (Scalar x, Scalar y, Scalar z)
 构造函数,指定 x, y, z 坐标 / Constructor specifying x, y, z coordinates
 
 Position (const Eigen::Matrix< Scalar, 3, 1 > &p)
 复制构造函数 / Copy constructor
 
 Position (const Position &p)
 复制构造函数 / Copy constructor
 
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>
 Position (const T(&data)[3])
 乘以旋转矩阵 / Multiply by a rotation matrix
 
Positionoperator= (const Eigen::Matrix< Scalar, 3, 1 > &p)
 赋值运算符,将 Eigen 向量赋值给 Position / Assignment operator to assign an Eigen vector to Position
 
Positionoperator= (const Position &p)
 赋值运算符,将 Eigen 向量赋值给 Position / Assignment operator to assign an Eigen vector to Position
 
template<typename Rotation , std::enable_if_t< std::is_same< Rotation, RotationMatrix< Scalar > >::value||std::is_same< Rotation, Eigen::Matrix< Scalar, 3, 3 > >::value||std::is_same< Rotation, Quaternion< Scalar > >::value||std::is_same< Rotation, Eigen::Quaternion< Scalar > >::value, int > = 0>
Eigen::Matrix< Scalar, 3, 1 > operator* (const Rotation &R)
 赋值运算符,将另一个 Position 赋值给当前对象 / Assignment operator to assign another Position to this object
 
template<typename Rotation , std::enable_if_t< std::is_same< Rotation, RotationMatrix< Scalar > >::value||std::is_same< Rotation, Eigen::Matrix< Scalar, 3, 3 > >::value||std::is_same< Rotation, Quaternion< Scalar > >::value||std::is_same< Rotation, Eigen::Quaternion< Scalar > >::value, int > = 0>
const Positionoperator*= (const Rotation &R)
 旋转并更新当前向量 / Rotate and update the current vector
 
Eigen::Matrix< Scalar, 3, 1 > operator/ (const RotationMatrix< Scalar > &R)
 旋转矩阵的逆变换 / Inverse transformation using a rotation matrix
 
const Positionoperator/= (const Quaternion< Scalar > &q)
 逆四元数旋转并更新当前向量 / Apply inverse quaternion rotation and update the current vector
 
const Positionoperator/= (const Eigen::Matrix< Scalar, 3, 3 > &R)
 逆旋转矩阵变换并更新当前向量 / Apply inverse rotation matrix transformation and update the current vector
 
const Positionoperator/= (const Eigen::Quaternion< Scalar > &q)
 逆四元数变换并更新当前向量 / Apply inverse quaternion transformation and update the current vector
 
const Positionoperator*= (Scalar s)
 按标量缩放当前向量 / Scale the current vector by a scalar
 
const Positionoperator/= (Scalar s)
 按标量除法缩放当前向量 / Scale the current vector by dividing with a scalar
 
Eigen::Quaternion< Scalaroperator/ (const Position<> &p)
 计算从另一个 Position 到当前 Position 的旋转四元数 / Compute the quaternion rotation from another Position to the current Position
 

Detailed Description

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

三维空间中的位置向量 / 3D position vector

该类基于 Eigen::Matrix<Scalar, 3, 1>,用于表示三维坐标中的位置,并支持基本的 旋转、缩放和转换运算。 This class extends Eigen::Matrix<Scalar, 3, 1> to represent a position in 3D space, supporting basic rotation, scaling, and transformation operations.

Template Parameters
Scalar数值类型(默认使用 DefaultScalar) / Numeric type (default: DefaultScalar)

Definition at line 36 of file transform.hpp.

Constructor & Destructor Documentation

◆ Position() [1/5]

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

默认构造函数,初始化为 (0,0,0) / Default constructor initializing to (0,0,0)

Definition at line 43 of file transform.hpp.

43: Eigen::Matrix<Scalar, 3, 1>(0, 0, 0) {}

◆ Position() [2/5]

template<typename Scalar >
LibXR::Position< Scalar >::Position ( Scalar  x,
Scalar  y,
Scalar  z 
)
inline

构造函数,指定 x, y, z 坐标 / Constructor specifying x, y, z coordinates

Parameters
xX 坐标 / X coordinate
yY 坐标 / Y coordinate
zZ 坐标 / Z coordinate

Definition at line 52 of file transform.hpp.

52: Eigen::Matrix<Scalar, 3, 1>(x, y, z) {}
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值

◆ Position() [3/5]

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

复制构造函数 / Copy constructor

Parameters
p另一个 Position 实例 / Another Position instance

Definition at line 58 of file transform.hpp.

58: Eigen::Matrix<Scalar, 3, 1>(p) {}

◆ Position() [4/5]

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

复制构造函数 / Copy constructor

Parameters
p另一个 Position 实例 / Another Position instance

Definition at line 64 of file transform.hpp.

64: Eigen::Matrix<Scalar, 3, 1>(p) {}

◆ Position() [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::Position< Scalar >::Position ( const T(&)  data[3])
inline

乘以旋转矩阵 / Multiply by a rotation matrix

Template Parameters
Rotation旋转矩阵类型 / Rotation matrix type
Parameters
R旋转矩阵 / Rotation matrix
Returns
旋转后的 Position / Rotated Position

Definition at line 76 of file transform.hpp.

76 : Eigen::Matrix<Scalar, 3, 1>(data)
77 {
78 }

Member Function Documentation

◆ operator*()

template<typename Scalar >
template<typename Rotation , std::enable_if_t< std::is_same< Rotation, RotationMatrix< Scalar > >::value||std::is_same< Rotation, Eigen::Matrix< Scalar, 3, 3 > >::value||std::is_same< Rotation, Quaternion< Scalar > >::value||std::is_same< Rotation, Eigen::Quaternion< Scalar > >::value, int > = 0>
Eigen::Matrix< Scalar, 3, 1 > LibXR::Position< Scalar >::operator* ( const Rotation R)
inline

赋值运算符,将另一个 Position 赋值给当前对象 / Assignment operator to assign another Position to this object

Parameters
p另一个 Position / Another Position object
Returns
赋值后的 Position / Updated Position object

Definition at line 121 of file transform.hpp.

122 {
123 return R * (*this);
124 }

◆ operator*=() [1/2]

template<typename Scalar >
template<typename Rotation , std::enable_if_t< std::is_same< Rotation, RotationMatrix< Scalar > >::value||std::is_same< Rotation, Eigen::Matrix< Scalar, 3, 3 > >::value||std::is_same< Rotation, Quaternion< Scalar > >::value||std::is_same< Rotation, Eigen::Quaternion< Scalar > >::value, int > = 0>
const Position & LibXR::Position< Scalar >::operator*= ( const Rotation R)
inline

旋转并更新当前向量 / Rotate and update the current vector

Template Parameters
Rotation旋转类型,可为旋转矩阵、四元数等 / Rotation type (can be a rotation matrix, quaternion, etc.)
Parameters
R旋转矩阵或四元数 / Rotation matrix or quaternion
Returns
更新后的 Position / Updated Position object

Definition at line 140 of file transform.hpp.

141 {
142 *this = R * (*this);
143 return *this;
144 }

◆ operator*=() [2/2]

按标量缩放当前向量 / Scale the current vector by a scalar

Parameters
s缩放因子 / Scaling factor
Returns
更新后的 Position / Updated Position object

Definition at line 197 of file transform.hpp.

198 {
199 *this = s * (*this);
200 return *this;
201 }

◆ operator/() [1/2]

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::Position< Scalar >::operator/ ( const Position<> &  p)
inline

计算从另一个 Position 到当前 Position 的旋转四元数 / Compute the quaternion rotation from another Position to the current Position

Parameters
p参考 Position / Reference Position
Returns
旋转四元数 / Quaternion rotation

Definition at line 222 of file transform.hpp.

223 {
224 return Eigen::Quaternion<Scalar>::FromTwoVectors(p, *this);
225 }

◆ operator/() [2/2]

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 1 > LibXR::Position< Scalar >::operator/ ( const RotationMatrix< Scalar > &  R)
inline

旋转矩阵的逆变换 / Inverse transformation using a rotation matrix

Parameters
R旋转矩阵 / Rotation matrix
Returns
变换后的向量 / Transformed vector

Definition at line 151 of file transform.hpp.

152 {
153 return (-R) * (*this);
154 }

◆ operator/=() [1/4]

template<typename Scalar >
const Position & LibXR::Position< Scalar >::operator/= ( const Eigen::Matrix< Scalar, 3, 3 > &  R)
inline

逆旋转矩阵变换并更新当前向量 / Apply inverse rotation matrix transformation and update the current vector

Parameters
R旋转矩阵 / Rotation matrix
Returns
更新后的 Position / Updated Position object

Definition at line 174 of file transform.hpp.

175 {
176 *this = R.transpose() * Eigen::Map<const Eigen::Matrix<Scalar, 3, 1>>(this->data_);
177 return *this;
178 }

◆ operator/=() [2/4]

template<typename Scalar >
const Position & LibXR::Position< Scalar >::operator/= ( const Eigen::Quaternion< Scalar > &  q)
inline

逆四元数变换并更新当前向量 / Apply inverse quaternion transformation and update the current vector

Parameters
q四元数 / Quaternion
Returns
更新后的 Position / Updated Position object

Definition at line 186 of file transform.hpp.

187 {
188 *this = q.conjugate() * Eigen::Map<const Eigen::Matrix<Scalar, 3, 1>>(this->data_);
189 return *this;
190 }

◆ operator/=() [3/4]

逆四元数旋转并更新当前向量 / Apply inverse quaternion rotation and update the current vector

Parameters
q四元数 / Quaternion
Returns
更新后的 Position / Updated Position object

Definition at line 162 of file transform.hpp.

163 {
164 *this = (-q) * (*this);
165 return *this;
166 }

◆ operator/=() [4/4]

按标量除法缩放当前向量 / Scale the current vector by dividing with a scalar

Parameters
s缩放因子 / Scaling factor
Returns
更新后的 Position / Updated Position object

Definition at line 208 of file transform.hpp.

209 {
210 (*this)[0] /= s;
211 (*this)[1] /= s;
212 (*this)[2] /= s;
213 return *this;
214 }

◆ operator=() [1/2]

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

赋值运算符,将 Eigen 向量赋值给 Position / Assignment operator to assign an Eigen vector to Position

Parameters
pEigen 3x1 向量 / Eigen 3x1 vector
Returns
赋值后的 Position / Updated Position object

Definition at line 86 of file transform.hpp.

87 {
88 memcpy(this->data(), p.data(), 3 * sizeof(Scalar));
89 return *this;
90 }

◆ operator=() [2/2]

赋值运算符,将 Eigen 向量赋值给 Position / Assignment operator to assign an Eigen vector to Position

Parameters
pEigen 3x1 向量 / Eigen 3x1 vector
Returns
赋值后的 Position / Updated Position object

Definition at line 98 of file transform.hpp.

99 {
100 if (this != &p)
101 {
102 memcpy(this->data(), p.data(), 3 * sizeof(Scalar));
103 }
104
105 return *this;
106 }

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