18#ifndef BIMHOMEBASE_ROTATION_H
19#define BIMHOMEBASE_ROTATION_H
171 Rotation(
const double q0,
const double q1,
const double q2,
const double q3);
203 void getValue(
double& q0,
double& q1,
double& q2,
double& q3)
const;
213 void setValue(
const double q0,
const double q1,
const double q2,
const double q3);
429 double& operator [] (
unsigned short usIndex)
431 return m_Quat[usIndex];
440 const double& operator [] (
unsigned short usIndex)
const
442 return m_Quat[usIndex];
Matrix4D 类,表示一个 4x4 矩阵
Definition Matrix.h:53
static const char * eulerSequenceName(EulerSequence seq)
根据传入的 EulerSequence 枚举值返回对应的字符串名称
Rotation & invert()
求取当前旋转对象的逆旋转
void setValue(const Matrix4D &matrix)
从 4x4 矩阵中提取旋转分量,并将其转换为四元数表示
void setValue(const Vector3d &axis, const double fAngle)
根据给定的旋转轴和旋转角度来设置四元数
Vector3d multVec(const Vector3d &src) const
将四元数表示的旋转应用于一个三维向量,并返回旋转后的向量
void getYawPitchRoll(double &y, double &p, double &r) const
从四元数中提取偏航(yaw)、俯仰(pitch)、翻滚(roll)这三个欧拉角
bool isSame(const Rotation &q, double tol) const
检查当前旋转对象是否在指定的公差范围内与另一个旋转对象 q 相同或者互为逆
Rotation inverse() const
返回当前旋转对象的逆旋转
void getValue(Vector3d &axis, double &rfAngle) const
获取当前对象的旋转轴和旋转角度
Rotation(const Vector3d &axis, const double fAngle)
创建一个围绕给定轴旋转指定角度的 Rotation 对象
void multVec(const Vector3d &src, Vector3d &dst) const
将四元数表示的旋转应用于一个三维向量
static Rotation makeRotationByAxes(Vector3d xdir, Vector3d ydir, Vector3d zdir, const char *priorityOrder="ZXY")
创建一个旋转,将以 xdir、ydir 和 zdir 为轴的本地坐标系中的向量转换为全局坐标系中的向量
void getEulerAngles(EulerSequence seq, double &alpha, double &beta, double &gamma) const
从旋转矩阵中提取欧拉角
void scaleAngle(const double scaleFactor)
按给定的缩放因子调整旋转角度
void setValue(const Vector3d &rotateFrom, const Vector3d &rotateTo)
根据两个三维向量 rotateFrom 和 rotateTo 来设置旋转
void setEulerAngles(EulerSequence seq, double alpha, double beta, double gamma)
根据指定的欧拉角顺序和角度值来设置旋转对象的状态
void getValue(double &q0, double &q1, double &q2, double &q3) const
获取当前对象的四元数分量
void setValue(const double q[4])
通过一个四元数数组来设置旋转对象的值
Vector3d m_Axis
旋转轴
Definition Rotation.h:467
double m_Angle
旋转角度
Definition Rotation.h:468
static Rotation slerp(const Rotation &rot0, const Rotation &rot1, double t)
执行两个四元数之间的球面线性插值(Spherical Linear Interpolation,简称 SLERP)
EulerSequence
欧拉角序列枚举
Definition Rotation.h:67
@ Extrinsic_XZX
Definition Rotation.h:89
@ Extrinsic_XZY
Definition Rotation.h:75
@ YawPitchRoll
Definition Rotation.h:72
@ Intrinsic_ZXZ
Definition Rotation.h:99
@ Intrinsic_YXZ
Definition Rotation.h:84
@ Intrinsic_ZYZ
Definition Rotation.h:100
@ Extrinsic_YZY
Definition Rotation.h:90
@ Intrinsic_XZX
Definition Rotation.h:96
@ Extrinsic_ZXY
Definition Rotation.h:78
@ EulerAngles
Definition Rotation.h:70
@ Intrinsic_XYX
Definition Rotation.h:95
@ Extrinsic_YXZ
Definition Rotation.h:77
@ Extrinsic_YXY
Definition Rotation.h:91
@ Extrinsic_ZYZ
Definition Rotation.h:92
@ Intrinsic_ZYX
Definition Rotation.h:86
@ Intrinsic_XYZ
Definition Rotation.h:81
@ Intrinsic_YXY
Definition Rotation.h:98
@ Intrinsic_XZY
Definition Rotation.h:82
@ Intrinsic_ZXY
Definition Rotation.h:85
@ EulerSequenceLast
Definition Rotation.h:102
@ Extrinsic_XYX
Definition Rotation.h:88
@ Extrinsic_YZX
Definition Rotation.h:76
@ Extrinsic_XYZ
Definition Rotation.h:74
@ Intrinsic_YZX
Definition Rotation.h:83
@ Invalid
Definition Rotation.h:68
@ Intrinsic_YZY
Definition Rotation.h:97
@ Extrinsic_ZXZ
Definition Rotation.h:93
@ Extrinsic_ZYX
Definition Rotation.h:79
static EulerSequence eulerSequenceFromName(const char *name)
根据指定的字符串名称返回对应的欧拉角序列枚举值
void evaluateVector()
用于从四元数表示的旋转中计算出对应的轴角表示
Rotation(const Matrix4D &matrix)
从一个 4x4 变换矩阵中提取旋转部分,并创建一个 Rotation 对象
const double * getValue() const
获取当前对象的四元数分量
Rotation()
默认构造函数,初始化了一个表示没有旋转的 Rotation 对象
bool isNull() const
检查当前旋转对象是否表示一个“空”的旋转
void getRawValue(Vector3d &axis, double &rfAngle) const
获取当前对象的旋转轴和旋转角度,不进行归一化
Rotation(const double q0, const double q1, const double q2, const double q3)
根据给定的四元数分量创建一个 Rotation 对象
bool isIdentity() const
检查当前旋转对象是否表示一个单位(或恒等)旋转
Rotation(const Vector3d &rotateFrom, const Vector3d &rotateTo)
创建一个 Rotation 对象,该对象表示从 rotateFrom 向量旋转到 rotateTo 向量所需的旋转
void normalize()
归一化当前旋转对象的四元数
static Rotation identity()
创建一个表示恒等旋转的 Rotation 对象
Rotation(const double q[4])
根据给定的四元数分量创建一个 Rotation 对象
void setValue(const double q0, const double q1, const double q2, const double q3)
设置 Rotation 对象的四元数分量,并进行归一化和向量评估
void getValue(Matrix4D &matrix) const
将四元数表示的旋转转换为 4x4 矩阵表示
void setYawPitchRoll(double y, double p, double r)
根据偏航(yaw)、俯仰(pitch)、翻滚(roll)这三个欧拉角设置 Rotation 对象的四元数
bool isSame(const Rotation &q) const
检查当前旋转对象是否与另一个旋转对象 q 相同,或者是否是彼此的逆
Rotation(const Rotation &rot)
拷贝构造函数
Definition BaseFigureFactory.h:24