1. 叉乘(X)
详细定义可以参考:叉积定义。
在三维坐标系中,如果 a = (a1, a2, a3), b = (b1, b2, b3),那么a x b = (a2b3 - a3b2, a3b1 - a1b3, a1b2 - a2b1)。
用矩阵表示则如图所示:
2. 表示方向
叉乘可以用来表示方向。
如图所示,根据右手定律可以很明显的知道b在a的左侧。
逆时针为正方向:
假设a(5, 0), b(3, 4), a x b = |a||b|sinθ,因为θ小于180度,所以a x b > 0, 所以b在a的左侧。
假设a(5, 0), b(3, -1), a x b = |a||b|sinθ,因为θ大于180度,所以a x b < 0, 所以b在a的右侧。
3. 重心法
在光栅化时,常常用重心法来判断是否一个点在三角形内,其实就是三条边依次叉乘。
如图所示,当p在三角形内时,以逆时针方向,在z轴方向上,AB x AP > 0, BC x BP > 0, CA x CP > 0。
4. code
这是我自己的写法
template<typename T>
struct Vec3 {
T x;
T y;
T z;
Vec3() : x(0.f), y(0.f), z(0.f) {
}
Vec3(T _x, T _y, T _z) : x(_x), y