BIMHome v1.0.0
BIMHome接口文档说明
Rotation.h
浏览该文件的文档.
1/************************************************************************
2* @file Rotation.h
3*
4* @brief 旋转类
5*
6* @details 旋转类
7*
8* @author dixu
9*
10* @version 1.0
11*
12* @date 2014-9-11
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef BIMHOMEBASE_ROTATION_H
19#define BIMHOMEBASE_ROTATION_H
20
21#include "Vector3D.h"
22#ifndef BH_GLOBAL_H
23#include <BHGlobal.h>
24#endif
25
26namespace Base
27{
28
29 class Matrix4D;
30
31 class BaseExport Rotation
32 {
33 public:
67 {
69
71
73
80
87
94
101
103 };
104
105 public:
114 static Rotation slerp(const Rotation& rot0, const Rotation& rot1, double t);
115
122
132 static Rotation makeRotationByAxes(Vector3d xdir, Vector3d ydir, Vector3d zdir, const char* priorityOrder = "ZXY");
133
134 public:
140
147 Rotation(const Vector3d& axis, const double fAngle);
148
154 Rotation(const Matrix4D& matrix);
155
161 Rotation(const double q[4]);
162
171 Rotation(const double q0, const double q1, const double q2, const double q3);
172
179 Rotation(const Vector3d& rotateFrom, const Vector3d& rotateTo);
180
186 Rotation(const Rotation& rot);
187
193 const double* getValue() const;
194
203 void getValue(double& q0, double& q1, double& q2, double& q3) const;
204
213 void setValue(const double q0, const double q1, const double q2, const double q3);
214
221 void getValue(Vector3d& axis, double& rfAngle) const;
222
229 void getRawValue(Vector3d& axis, double& rfAngle) const;
230
236 void getValue(Matrix4D& matrix) const;
237
243 void setValue(const double q[4]);
244
250 void setValue(const Matrix4D& matrix);
251
258 void setValue(const Vector3d& axis, const double fAngle);
259
266 void setValue(const Vector3d& rotateFrom, const Vector3d& rotateTo);
267
275 void setYawPitchRoll(double y, double p, double r);
276
284 void getYawPitchRoll(double& y, double& p, double& r) const;
285
292 static const char* eulerSequenceName(EulerSequence seq);
293
300 static EulerSequence eulerSequenceFromName(const char* name);
301
310 void getEulerAngles(EulerSequence seq, double& alpha, double& beta, double& gamma) const;
311
320 void setEulerAngles(EulerSequence seq, double alpha, double beta, double gamma);
321
327 bool isIdentity() const;
328
334 bool isNull() const;
335
342
349
356 void multVec(const Vector3d& src, Vector3d& dst) const;
357
364 Vector3d multVec(const Vector3d& src) const;
365
371 void scaleAngle(const double scaleFactor);
372
379 bool isSame(const Rotation& q) const;
380
388 bool isSame(const Rotation& q, double tol) const;
389
396 Rotation& operator *= (const Rotation& q);
397
404 Rotation operator * (const Rotation& q) const;
405
413 bool operator == (const Rotation& q) const;
414
421 bool operator != (const Rotation& q) const;
422
429 double& operator [] (unsigned short usIndex)
430 {
431 return m_Quat[usIndex];
432 }
433
440 const double& operator [] (unsigned short usIndex) const
441 {
442 return m_Quat[usIndex];
443 }
444
450 void operator = (const Rotation& rot);
451
452 private:
457 void normalize();
458
464
465 private:
466 double m_Quat[4];
468 double m_Angle;
469 };
470
471}
472
473#endif // BIMHOMEBASE_ROTATION_H
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 Rotation.h:32
Definition BaseFigureFactory.h:24