线段交点计算的部分内容可以参照直线交点计算,与之不同的部分是需要判断线段交点的参数是否在定义域内。
1.直线与多项式交点-代数方式
1.1 方程
n次多项式:
X
(
s
)
=
∑
j
=
0
n
A
j
s
j
⋯
(
1
)
,
s
∈
[
s
m
i
n
,
s
m
a
x
]
X(s)=\sum_{j=0}^{n}A_js^j \cdots (1),s\in[s_{min},s_{max}]
X(s)=∑j=0nAjsj⋯(1),s∈[smin,smax],
直线:
X
(
t
)
=
P
+
t
d
⃗
⋯
(
2
)
X(t) = P+t \vec{d}\cdots(2)
X(t)=P+td⋯(2)
1.2 交点
采用KR算子(定义见直线交点文章),可以消去t项,得:
K
R
(
d
⃗
,
X
(
s
)
)
=
∑
j
=
0
n
K
R
(
d
⃗
,
A
j
)
s
j
=
K
R
(
d
⃗
,
P
+
t
d
⃗
)
=
K
R
(
d
⃗
,
P
)
KR(\vec{d},X(s))=\sum_{j=0}^{n}KR(\vec{d},A_j)s^j =KR(\vec{d},P+t\vec{d})=KR(\vec{d},P)
KR(d,X(s))=j=0∑nKR(d,Aj)sj=KR(d,P+td)=KR(d,P)
可得:
∑
j
=
0
n
K
R
(
d
⃗
,
A
j
)
s
j
−
K
R
(
d
⃗
,
P
)
=
0
\sum_{j=0}^{n}KR(\vec{d},A_j)s^j -KR(\vec{d},P)=0
j=0∑nKR(d,Aj)sj−KR(d,P)=0
q
(
s
)
=
∑
j
=
0
n
c
j
s
j
,
c
0
=
K
R
(
d
⃗
,
A
0
−
P
)
,
c
j
=
K
R
(
d
⃗
,
A
j
)
⋯
(
3
)
q(s)=\sum_{j=0}^{n}c_js^j,c_0=KR(\vec{d},A_0-P),c_j=KR(\vec{d},A_j)\cdots(3)
q(s)=j=0∑ncjsj,c0=KR(d,A0−P),cj=KR(d,Aj)⋯(3)
对(3)可以采用数值根求解的方法去求解,最后得到s,判断
s
∈
[
s
m
i
n
,
s
m
a
x
]
s\in[s_{min},s_{max}]
s∈[smin,smax],即可求得交点。