mat4

std.math.mat4

rec Mat4

pub rec Mat4;

一个 4x4 单精度矩阵,四个 f32x4 行,按行主序排列

rows:四个行向量,rows[i][j] 是第 i 行第 j 列

fun mat4_identity

pub fun mat4_identity() Mat4;

4x4 单位矩阵

ret:对角线上为 1,其他位置为 0 的矩阵

fun mat4_zero

pub fun mat4_zero() Mat4;

4x4 零矩阵

ret:所有元素为零的矩阵

fun mat4_add

pub fun mat4_add(a: Mat4, b: Mat4) Mat4;

两个矩阵的逐元素相加

a:第一个矩阵 b:第二个矩阵 ret:逐元素相加的结果 a + b

fun mat4_sub

pub fun mat4_sub(a: Mat4, b: Mat4) Mat4;

两个矩阵的逐元素相减

a:第一个矩阵 b:第二个矩阵 ret:逐元素相减的结果 a - b

fun mat4_scale

pub fun mat4_scale(m: Mat4, s: f32) Mat4;

用标量缩放矩阵的每个元素

m:矩阵 s:标量因子 ret:每个元素都乘以 s 的矩阵 m

fun mat4_mul

pub fun mat4_mul(a: Mat4, b: Mat4) Mat4;

矩阵乘积 a*b(行向量约定:先应用 a 再应用 b

每个结果行都是 a 的行与 b 的行重新组合,因此乘法和加法在支持的目标上是逐通道的向量操作。

a:左矩阵 b:右矩阵 ret:乘积 a*b

fun mat4_mul_vec

pub fun mat4_mul_vec(m: Mat4, v: f32x4) f32x4;

用矩阵变换行向量(v * m

m:矩阵 v:行向量 ret:变换后的向量 v * m

fun mat4_transpose

pub fun mat4_transpose(m: Mat4) Mat4;

矩阵转置(交换行和列)

m:矩阵 ret:矩阵 m 的转置

fun mat4_determinant

pub fun mat4_determinant(m: Mat4) f32;

矩阵的行列式

展开自顶两行的六个 2x2 子矩阵与底两行的六个子矩阵——拉普拉斯余子式形式,与逆矩阵共享。

m:矩阵 retdet(m)

fun mat4_inverse

pub fun mat4_inverse(m: Mat4) Option[Mat4];

矩阵的逆,如果矩阵是奇异的则返回 none

使用与行列式相同的余子式 2x2 子矩阵构建伴随矩阵,然后缩放其倒数。行列式恰好为零时返回 none

m:矩阵 ret:如果可逆则返回 some(inverse),如果奇异则返回 none