ARQuat四元数
此类封装数学库,适用于2.6版本以上的SDK。
ARQuat表示一个四元数,它代表了一个旋转,任何旋转都可以解析为绕某个轴转一定角度,包含四个float型成员w、x、y、z
Fileds
类型 | 成员变量 |
---|---|
float | w |
float | x |
float | y |
float | z |
ARQuat::w
获取四元数的w的值
Parameters
- 无
Returns
- float : w的值
sample:
local quat = ae.ARQuat:new_local(1, 1, 1, 1)
local w_value = quat.w
ARQuat::x
获取四元数的x的值
Parameters
- 无
Returns
- float : x的值
sample:
local quat = ae.ARQuat:new_local(1, 1, 1, 1)
local x_value = quat.x
ARQuat::y
获取四元数的y的值
Parameters
- 无
Returns
- float : y的值
sample:
local quat = ae.ARQuat:new_local(1, 1, 1, 1)
local z_value = quat.y
ARQuat::z
获取四元数的z的值
Parameters
- 无
Returns
- float : z的值
sample:
local quat = ae.ARQuat:new_local(1, 1, 1, 1)
local z_value = quat.z
Public Methods
返回类型 | 函数名 | 备注 |
---|---|---|
ARQuat | ARQuat() | 构造函数 |
ARQuat | ARQuat(float w, float x, float y, float z)](# ARQuat::ARQuat(float w, float x, float y, float z) |
构造函数 |
ARQuat | ARQuat(ARVec3 axis, float angle)](# ARQuat::ARQuat(ARVec3 axis, float angle) |
构造函数 |
string | to_string() | 转换为字符串 |
void | rotation(const ARVec3& src, const ARVec3& dst) | 得到两个向量之间的旋转四元数 |
float | angle() | 返回该四元数的旋转角度 |
ARVec3 | axis() | 反回该四元数的旋转轴 |
ARQuat | operator*(const ARQuat& src) | 四元数相乘 |
ARVec3 | operator*(const ARVec3& src) | 计算某轴绕该四元数的旋转 |
ARQuat::ARQuat()
ARQuat ARQuat() 创建一个四元数,w、x、y、z全部为0
Parameters
- 无
Returns
- ARQuat : 返回一个四元数
sample:
local quat = ae.ARQuat:new_local()
ARQuat::ARQuat(float w, float x, float y, float z)
ARQuat ARQuat(float w, float x, float y, float z) 通过四个float直接赋值创建一个四元数
Parameters
- w | float
- x | float
- y | float
- z | float
Returns
- ARQuat : 返回一个四元数
sample:
local quat = ae.ARQuat:new_local(1,1,1,1)
ARQuat::ARQuat(ARVec3 axis, float angle)
ARQuat ARQuat(ARVec3 axis, float angle) 通过旋转轴与旋转角度创建一个四元数
Parameters
- axis | ARVec3 : 旋转轴
- angle | float : 旋转角度
Returns
- ARQuat : 返回一个四元数
sample:
local axis = ae.ARVec3:new_local(1, 1, 1)
local angle = 0.5
local quat = ae.ARQuat:new_local(axis, angle)
ARQuat::to_string()
string to_string() 获取四元数的字符串形式
Parameters
- 无
Returns
- string : 返回四元数的字符串形式
sample:
local quat = ae.ARQuat:new_local(1,1,1,1)
local str = quat:to_string()
ARQuat::rotation(const ARVec3& src, const ARVec3& dst)
void rotation(const ARVec3& src, const ARVec3& dst) 计算两个从src向量转到dst向量的四元数,并将值给到自己
Parameters
- src | ARVec3 : 初始向量
- dst | ARVec3 : 目标向量
Returns
- void
sample:
local quat = ae.ARQuat:new_local()
local src = ae.ARVec3:new_local(0, 0, 1)
local dst = ae.ARVec3:new_local(1, 1, 1)
quat:rotation(src, dst) --执行后四元数的值会变化,quat表示从src到dst的旋转
ARQuat::angle()
float angle() 获取该四元数的旋转角
Parameters
- 无
Returns
- float : 获取该四元数的旋转角
sample:
local quat = ae.ARQuat:new_local()
local src = ae.ARVec3:new_local(0, 0, 1)
local dst = ae.ARVec3:new_local(1, 1, 1)
quat:rotation(src, dst)
local angle = quat:angle()
ARQuat::axis()
ARVec3 axis() 获取该四元数的旋转轴
Parameters
- 无
Returns
- ARVec3 : 获取该四元数的旋转轴
sample:
local quat = ae.ARQuat:new_local()
local src = ae.ARVec3:new_local(0, 0, 1)
local dst = ae.ARVec3:new_local(1, 1, 1)
quat:rotation(src, dst)
local axis = quat:axis()
ARQuat::operator*(const ARQuat& src)
ARQuat operator*(const ARQuat& src) 两个四元数相乘,返回一个新的四元数
Parameters
- src | ARQuat
Returns
- ARQuat : 返回一个新的四元数
sample:
//创建四元数ARQuat quat_a quat_b
local result = quat_a * quat_b
ARQuat::operator*(const ARVec3& src)
ARVec3 operator*(const ARVec3& src) 四元数代表一个旋转,本函数计算src向量进行本次旋转后的向量
Parameters
- src | ARVec3 : 待旋转的向量
Returns
- ARVec3 : 旋转后的向量
sample:
-- 创建四元数ARQuat quat
-- 创建一个待旋转的向量 ARVec3 axis
local axis_after_rotation = quat * axis