开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术
AR与VR
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
信息服务
智能园区

ARMat44

此类封装数学库,适用于2.6版本以上的SDK。

ARMat44表示一个四维矩阵,包含四个ARVec4型成员x、y、z、w

Fileds

类型 成员变量
ARVec4 x
ARVec4 y
ARVec4 z
ARVec4 w

ARMat44::x

获取四维矩阵中的x向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回x分量
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
 
local x = data.x

ARMat44::y

获取四维矩阵中的y向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回y分量
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)

 
local y = data.y

ARMat44::z

获取四维矩阵中的z向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回z分量
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)

local z = data.z

ARMat44::w

获取四维矩阵中的w向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回w分量

DEMO:

sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
 
local w = data.w

Public Methods

返回类型 函数名 备注
ARMat44 ARMat44() 构造函数
ARMat44 ARMat44(ARVec4& x, ARVec4& y, ARVec4& z, ARVec4& w) 构造函数
ARMat44 inverse() 返回逆矩阵
string to_string() 转换为字符串
ARMat44 operator+(const ARMat44& src) + 号操作符
ARMat44 operator-(const ARMat44& src) - 号操作符
ARMat44 operator*(const ARMat44& src) * 号操作符(矩阵相乘)
ARVec4 operator*(const ARVec4& src) * 号操作符(矩阵乘以向量)
ARMat44 operator/(const ARMat44& src) / 号操作符
bool operator==(const ARMat44& src) ==号操作符
ARVec4& operator[](unsigned i) []号操作符
ARVec3 get_up_vector() 获取朝上的向量
ARVec3 get_down_vector() 获取朝下的向量
ARVec3 get_left_vector() 获取朝左的向量
ARVec3 get_right_vector() 获取朝右的向量
ARVec3 get_front_vector() 获取朝前的向量
ARVec3 get_back_vector() 获取朝后的向量
bool is_identity() 是否是单位矩阵
bool decompose_matrix(ARVec3& position, ARQuat& rotation, ARVec3& scale) 是否是单位矩阵
ARMat44& identity() 创建一个4维单位矩阵
ARMat44 create_look_at(ARVec3& eye_pos, ARVec3& target_center, ARVec3& up_vector) 通过相机位置朝向创建一个矩阵
ARMat44 create_from_rts(const ARVec3& rotation, const ARVec3& translation, const ARVec3& scale) 通过旋转、平移与放大向量来创建一个矩阵
ARMat44 create_scale(const ARVec3& scale) 创建一个scale矩阵
ARMat44 create_rotation(const ARVec3& axis, float angle) 创建一个旋转矩阵
ARMat44 create_translation(const ARVec3& trans) 创建一个平移矩阵

ARMat44()::ARMat44()

ARMat44 ARMat44()

构造函数,不传入任何参数,向量x、向量y、向量z和向量w的值默认为0

Parameters

Returns

  • ARMat44 : 一个新的ARMat44
sample:
local data = ae.ARMat44:new_local()

ARMat44(ARVec4& x, ARVec4& y, ARVec4& z, ARVec4& w)

ARMat44 ARMat44(ARVec4& x, ARVec4& y, ARVec4& z, ARVec4& w)

构造函数,传入三个ARVec4的向量

Parameters

  • x | ARVec4
  • y | ARVec4
  • z | ARVec4
  • w | ARVec4

Returns

  • ARMat44 : 一个新的ARMat44
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local mat44 = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)

ARMat44::inverse()

ARMat44 inverse()

返回该矩阵的逆矩阵

Parameters

Returns

  • ARMat44 : 返回该矩阵的逆矩阵
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local mat44 = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
local inverse_mat44 = mat44:inverse()

ARMat44::to_string()

string to_string()

返回此矩阵的字符串表示

Parameters

Returns

  • string : 返回此矩阵的字符串表示
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local mat44 = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
local string_mat = mat44:to_string()

ARMat44::operator+(const ARMat44& src)

ARMat44 operator+(const ARMat44& src) 重载加号运算符,两个矩阵相加,矩阵中的每一个值都对应相减

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a + mat_b

ARMat44::operator-(const ARMat44& src)

ARMat44 operator-(const ARMat44& src) 重载减号运算符,两个矩阵相减,矩阵中的每一个值都对应相减

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a - mat_b

ARMat44::operator*(const ARMat44& src)

ARMat44 operator*(const ARMat44& src) 重载乘号运算符,两个矩阵相乘,按照矩阵乘法的规则进行乘

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a * mat_b

ARMat44::operator*(const ARVec4& src)

ARVec4 operator*(const ARVec4& src) 重载乘号运算符,矩阵与向量相乘,按照矩阵向量乘法的规则进行乘

Parameters

  • src | ARVec4

Returns

  • ARVec4 : 返回一个四维向量
sample:
-- 创建ARMat44 mat
-- 创建ARVec4 vec
local result = mat * vec

ARMat44::operator/(const ARMat44& src)

ARMat44 operator/(const ARMat44& src) 重载除号运算符,两个矩阵相除,每个分量分别相除

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a / mat_b

ARMat44::operator==(const ARMat44& src)

bool operator==(const ARMat44& src) 重载等于号运算符,判断两个矩阵的每个分量是否相等

Parameters

  • src | ARMat44

Returns

  • bool : true或者false
sample:
-- 创建ARMat44 mat_a,mat_b
if (mat_a == mat_b) then

else

end

ARMat44::operator[](unsigned i)

ARVec4 operator[](unsigned i)

重载[]运算符,获取相应分量,[0]表示获取x三维向量,[1]表示获取y三维向量,[2]表示获取z三维向量,[3]表示获取w三维向量 返回一个ARVec4 注意:调用3以上会造成数组越界,是非法操作

Parameters

  • i | int : 表示序列数index

Returns

  • ARVec4 : 返回x、y、z和w的值
sample:
-- 创建ARMat44 mat_a
local x = mat_a[0]
local y = mat_a[1]
local z = mat_a[2]
local w = mat_a[3]

ARMat44::up()

ARVec3 up()

获取该矩阵的up向量

Parameters

Returns

  • ARVec3 : up向量
sample:
-- 创建ARMat44 mat44
local up = mat44:up()

ARMat44::down()

ARVec3 down()

获取该矩阵的down向量

Parameters

Returns

  • ARVec3 : down向量
sample:
-- 创建ARMat44 mat44
local down = mat44:down()

ARMat44::left()

ARVec3 left()

获取该矩阵的left向量

Parameters

Returns

  • ARVec3 : left向量
sample:
-- 创建ARMat44 mat44
local left = mat44:left()

ARMat44::right()

ARVec3 right()

获取该矩阵的right向量

Parameters

Returns

  • ARVec3 : right向量
sample:
-- 创建ARMat44 mat44
local right = mat44:right()

ARMat44::front()

ARVec3 front()

获取该矩阵的front向量

Parameters

Returns

  • ARVec3 : front向量
sample:
-- 创建ARMat44 mat44
local front = mat44:front()

ARMat44::back()

ARVec3 back()

获取该矩阵的back向量

Parameters

Returns

  • ARVec3 : back向量
sample:
-- 创建ARMat44 mat44
local back = mat44:back()

ARMat44::is_identity()

bool is_identity()

判断该矩阵是否是单位矩阵

Parameters

Returns

  • bool : true或者false
sample:
-- 创建ARMat44 mat44
local is_idt = mat44:is_identity()

ARMat44::decompose_matrix(ARVec3& position, ARQuat& rotation, ARVec3& scale)

void decompose_matrix(ARVec3& position, ARQuat& rotation, ARVec3& scale)

将该矩阵分解,把代表位置,旋转和放大的分量值给到传入的position,rotation和scale中

Parameters

  • position | ARVec3 : 代表矩阵中的平移属性
  • rotation | ARQuat : 代表矩阵中的旋转属性
  • scale | ARVec3 : 代表矩阵中的放缩属性

Returns

  • void
sample:
local t = ae.ARVec3:new_local()
local r = ae.ARQuat:new_local()
local s = ae.ARVec3:new_local()

local mat44 = scene.nodename:world_transform()

mat44:decompose_matrix(t,r,s)
ARLOG("t "..t:to_string())
ARLOG("r "..r:to_string())
ARLOG("s "..s:to_string())

ARMat44::identity()

ARMat44& identity()

创建一个单位矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

Returns

  • ARMat44 : 创建一个单位矩阵
sample:
local  data = ae.ARMat44:identity()

ARMat44::create_look_at(ARVec3& eye_pos, ARVec3& target_center, ARVec3& up_vector)

ARMat44 create_look_at(ARVec3& eye_pos, ARVec3& target_center, ARVec3& up_vector)

通过相机视角的三个量来创建一个矩阵,eye_pos(相机位置), target_center(朝向),up_vector(相机up方向向量) 注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • eye_pos | ARVec3 : 相机的位置
  • target_ceter | ARVec3 : 相机朝向的位置
  • up_vector | ARVec3 : 相机up方向向量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARVec3 eye_pos, target_center, up_vector
local data = ae.ARMat44:create_look_at(eye_pos, target_center, up_vector)

ARMat44::create_from_trs(const ARVec3& translation, const ARQuat& rotation, const ARVec3& scale)

ARMat44 create_from_trs(const ARVec3& translation, const ARQuat& rotation, const ARVec3& scale)

通过平移、旋转与放大来创建一个矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • translation | ARVec3 : 平移量
  • rotation | ARQuat : 旋转量
  • scale | ARVec3 : 放大量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
local t = ae.ARVec3:new_local()
local r = ae.ARQuat:new_local()
local s = ae.ARVec3:new_local()

local mat44 = scene.node_1:world_transform()
mat44:decompose_matrix(t,r,s)

local mat44_2 = ae.ARMat44:create_from_trs(t,r,s)

-- mat44_2 与mat44应该相等

ARMat44::create_scale(const ARVec3& scale)

ARMat44 create_scale(const ARVec3& scale)

通过放大向量 scale 来创建一个矩阵

Parameters

  • scale | ARVec3 : 放大向量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARVec3 scale
local data = ae.ARMat44:create_scale(scale)

ARMat44::create_rotation(const ARVec3& axis, float angle)

ARMat44 create_rotation(const ARVec3& axis, float angle)

通过旋转轴 axis 与绕轴旋转的角度 angle 创建一个矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • axis | ARVec3 : 旋转轴
  • angle | float : 旋转角度

Returns

  • ARMat44 : 一个新的ARMat44
sample:
--创建ARVec3 axis 
--设置角度 angle
local data = ae.ARMat44:create_rotation(axis, angle)

ARMat44::create_translation(const ARVec3& trans)

ARMat44 create_translation(const ARVec3& trans)

通过平移向量trans来创建一个矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • trans | ARVec3 : 平移向量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARVec3 trans
local data = ae.ARMat44:create_translation(trans)
上一篇
ARMat33
下一篇
ARQuat四元数