Skip to content

三角形与射线交点计算 ​

在空间中,假设我们已经知道了三角形的三个点 V0,V1,V2 以及一条射线,其出发点为O,其方向为D

下面推导一下如何求取它们的交点

在这条射线上的点为

P(t)=O+tD

现在的目标即求解出一个 t,使得 O+tD∈△V0V1V2

我们可以得出三角形的两条边的向量:

E1→=V1−V0E2→=V2−V0

那么这个三角形所在平面上的点可以表示为

P=V0+uE1→+vE2→

回代E1→,E2→ 可以得到

P=(1−u−v)V0+uV1+vV2

记

ω=1−u−v

那么点 P 在三角形内的条件即

u≥0,v≥0,u+v≤1

现在有了三角形的空间表示,我们要找的交点即使得 P 可以用三角形的表示也可以用射线的表示,即

O+tD=V0+uE1+vE2

很不幸的,我们现在有三个未知量

t,u,v

我们先进行一次整理,先移项

O−V0=uE1+vE2−tD

如果我们记

T=O−V0

那么原式可化为

T=uE1+vE2−tD

一个非常标准的三元一次方程组的求解,也可以写成矩阵的形式,直接上克莱姆,结束(

不过值得注意的是,此处大概率会把求行列式的操作使用混合积来实现,使得不需要引入新的向量运算(假设我们已提供了点积和叉乘的操作)

Released under the MIT License.