再论向量在游戏中的应用(4) 向量除向量问题

胡B猜想

在PIP中求解线段交点时候,得到的t值

使用的是 (c-a) 叉乘 s 除 r 叉乘 s

但是在PIT的方程组联立求解时候却使用的是点乘v0,v1. 避免了直接叉乘问题.

知乎上有一篇文章 介绍了 为何 向量无除法

底下有一个回答也提到了

也就是两个向量方向相同才可以除.

个人的理解(未证实). 也就是 PIT 和 PIP问题 在2D平面内 都可以用 叉乘消参数然后做除法判断.

换句话说 也就是 如果三角形是在2D平面内定义的(有x,y坐标无z坐标). 也是可以用叉乘消除v0,v1的.

不过这样就限制了该函数的适用范围.

首先 无论 PIP 还是PIT问题, P点和其余点一定都在一个平面内. 而叉积结果也都一定垂直于这个平面.

但是如果 不在2D平面内时候会有一个 如何去 取叉积的问题.

比如 2D平面两个向量叉乘, 最后结果分别为 a = Vector3(0,0,10), b = Vector(0,0,5)

然后做除法 a/b 得到结果为 Vector(0,0,2)

此时 就可以说 标量 t 的值 是2

但是如果换成一个一般平面做叉乘,得到的a = Vector3(1,2,3) b = Vector3(4,5,6)

这个 a/b 显然无任何几何意义了.

再比如 a = Vector3(3,6,9) , b = Vector3(1,2,3)

a/b = Vector(3,3,3) 得到了一个新的向量. 但是如何把这个向量 和 标量 t 联系起来呢? 是直接取 Vector3的模么?

总结

总结起来就是 PIP问题 是放在2D平面内做的解. 如果把上述公式带入3D坐标系内 则不成立. 要放在3D坐标系中使用的话 就需要现做坐标转换,把对应所有点的坐标都转到两个线段所在的2D平面内 (也就是对于3D的点P 要做一次 坐标变换)

而PIT的求解方式是直接在3D坐标系下进行的. 只要保证P点和ABC所构成的三角形共面 就可以使用.

坚持原创技术分享,您的支持将鼓励我继续创作!