线段交点计算的部分内容可以参照直线交点计算,与之不同的部分是需要判断线段交点的参数是否在定义域内。
1.线段与线段求交
1.1 方程
线段1:
P
0
+
s
d
0
⃗
,
P
0
,
P
0
′
为线段两个端点
,
d
0
⃗
=
P
0
′
−
P
0
,
s
∈
[
0
,
1
]
P_0+s\vec{d_0},P_0,P_0'为线段两个端点,\vec{d_0}=P_0'-P_0,s\in[0,1]
P0+sd0,P0,P0′为线段两个端点,d0=P0′−P0,s∈[0,1].
线段2:
P
1
+
t
d
1
⃗
,
P
1
,
P
1
′
为线段两个端点
,
d
1
⃗
=
P
1
′
−
P
1
,
t
∈
[
0
,
1
]
P_1+t\vec{d_1},P_1,P_1'为线段两个端点,\vec{d_1}=P_1'-P_1,t\in[0,1]
P1+td1,P1,P1′为线段两个端点,d1=P1′−P1,t∈[0,1].
1.2 判断平行
同直线交点一致,满足该条件则说明两直线平行没有交点。
∣
∣
K
R
(
u
⃗
,
v
⃗
)
∣
∣
2
≤
∥
u
⃗
∥
2
∥
v
⃗
∥
2
∣
ε
2
||KR(\vec{u},\vec{v})||^2\le\left \| \vec{u} \right \|^2\left \| \vec{v} \right \|^2|\varepsilon^2
∣∣KR(u,v)∣∣2≤∥u∥2∥v∥2∣ε2
1.3 交点计算
同直线交点一致
s
=
K
R
(
Δ
,
d
1
⃗
)
/
K
R
(
d
0
⃗
,
d
1
⃗
)
,
t
=
K
R
(
Δ
,
d
0
⃗
)
/
K
R
(
d
0
⃗
,
d
1
⃗
)
s=KR(\Delta,\vec{d_1})/KR(\vec{d_0},\vec{d_1}),t=KR(\Delta,\vec{d_0})/KR(\vec{d_0},\vec{d_1})
s=KR(Δ,d1)/KR(d0,d1),t=KR(Δ,d0)/KR(d0,d1)
判断是否在参数定义域内:
s
∈
[
0
,
1
]
s\in[0,1]
s∈[0,1] and
t
∈
[
0
,
1
]
t\in[0,1]
t∈[0,1]同时成立,则交点存在
2.线段与直线、线段与射线
这两种情况的交点计算同1基本一致,不同之处在于,求出参数s,t后,对s,t的定义域判断不同。可自行推理。