S03E02: SIMD 框架中的向量乘法

1,766 阅读1分钟

说明

向量乘法只有两种:点乘与叉乘。它们各自有哪些运算性质,同时在 SIMD 框架中,也可以用乘法运算符 * 对两个向量进行运算,它又是什么?

分量相乘

其实这个乘法运算,就是将两个向量的 x,y,z 分量各自乘起来,得到一个新的向量而已,比如 RGB 颜色的混合,也可以叫分量相乘。如下代码a * b = (1 * -3, 2 * -2, 3 * -1),而这个乘法的结果,只需要再求和,就与点乘一样:

let a = simd_float3(1, 2, 3)
let b = simd_float3(-3, -2, -1)
let c = a * b
let d = dot(a, b)

//SIMD3<Float>(-3.0, -4.0, -3.0) -10.0 -10.0
print(c, c.sum(), d,)

它是普通标量乘法的特殊形式,满足交换律加法分配律,和结合律

点乘运算律

点乘满足交换律加法分配律,结合律仅适用于实数,即与标量乘法兼容。三个向量无法连续点乘,因为任意两个向量点乘结果为一个实数,所以会变成与实数的一般乘法。

叉乘运算律

叉乘满足反交换律加法分配律,结合律仅适用于实数,即与标量乘法兼容。

最后

其实,我们在前面的内容写计算几何时,已经多次用到了这些乘法运算规律。此处为统一总结,不再详细举例。