设直线过点m,直线向量为VL,设三角形平面过点n,平面法向量为VP,两者的交点为O。
直线方程为
{
m
x
+
V
L
x
⋅
t
=
x
m
y
+
V
L
y
⋅
t
=
y
m
z
+
V
L
z
⋅
t
=
z
\left\{\begin{aligned}\\ m_x+VL_x\cdot t=x\\ m_y+VL_y\cdot t=y\\ m_z+VL_z\cdot t=z \end{aligned}\right.
⎩⎪⎨⎪⎧mx+VLx⋅t=xmy+VLy⋅t=ymz+VLz⋅t=z
平面方程为
V
P
x
⋅
(
x
−
n
x
)
+
V
P
y
⋅
(
y
−
n
y
)
+
V
P
z
⋅
(
z
−
n
z
)
=
0
VP_x\cdot(x-n_x)+VP_y\cdot(y-n_y)+VP_z\cdot(z-n_z)=0
VPx⋅(x−nx)+VPy⋅(y−ny)+VPz⋅(z−nz)=0
联立两式有
t
=
(
(
n
x
−
m
x
)
⋅
V
P
x
+
(
n
y
−
m
y
)
⋅
V
P
y
+
(
n
z
−
m
z
)
⋅
V
P
z
)
/
(
V
P
x
⋅
V
L
x
+
V
P
y
⋅
V
L
y
+
V
P
z
⋅
V
L
z
)
t=((n_x-m_x)\cdot VP_x+(n_y-m_y)\cdot VP_y+(n_z-m_z)\cdot VP_z)/\\ (VP_x\cdot VL_x+VP_y\cdot VL_y+VP_z\cdot VL_z)
t=((nx−mx)⋅VPx+(ny−my)⋅VPy+(nz−mz)⋅VPz)/(VPx⋅VLx+VPy⋅VLy+VPz⋅VLz)
若上式分母等于零,则直线和平面平行。
上式求解过程可以写成向量形式
t
=
(
m
n
⃗
⋅
V
P
⃗
)
/
(
V
L
⃗
⋅
V
P
⃗
)
t=(\vec{mn}\cdot\vec{VP})/(\vec{VL}\cdot\vec{VP})
t=(mn⋅VP)/(VL⋅VP)
对于三角形平面,有三个顶点A,B,C,可以设平面过点A,平面的法向量为两个向量的叉乘
V
P
⃗
=
A
B
⃗
×
A
C
⃗
\vec{VP}=\vec{AB}\times\vec{AC}
VP=AB×AC
基于python与CUDA的N卡GPU并行程序——直线和三角形的交点
最新推荐文章于 2024-05-11 15:52:39 发布