这里讨论的是线段(用两个端点描述一条线段)之间的相交、平行等情况的判定。
线段
线段
l
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
}
l=\{(x_1, y_1), (x_2,y_2)\}
l={(x1,y1),(x2,y2)}
线段
l
′
=
{
(
x
1
′
,
y
1
′
)
,
(
x
2
′
,
y
2
′
)
}
l'=\{(x'_1, y'_1), (x'_2,y'_2)\}
l′={(x1′,y1′),(x2′,y2′)}
相交
如果两条线段相交(特指两条线段不平行的情况),可设交点为
(
x
,
y
)
(x, y)
(x,y),则有:
{
x
=
x
1
+
λ
(
x
2
−
x
1
)
=
x
1
′
+
μ
(
x
2
′
−
x
1
′
)
y
=
y
1
+
λ
(
y
2
−
y
1
)
=
y
1
′
+
μ
(
y
2
′
−
x
1
′
)
\begin{cases} x=x_1+\lambda(x_2-x_1)=x'_1+\mu(x'_2-x'_1) \\ y=y_1+\lambda(y_2-y_1)=y'_1+\mu(y'_2-x'_1) \end{cases}
{x=x1+λ(x2−x1)=x1′+μ(x2′−x1′)y=y1+λ(y2−y1)=y1′+μ(y2′−x1′)
整理有:
{
(
x
2
−
x
1
)
λ
+
(
x
2
′
−
x
1
′
)
μ
=
x
1
′
−
x
1
(
y
2
−
y
1
)
λ
+
(
y
2
′
−
y
1
′
)
μ
=
y
1
′
−
y
1
\begin{cases} (x_2-x_1)\lambda+(x'_2-x'_1)\mu=x'_1-x_1 \\ (y_2-y_1)\lambda+(y'_2-y'_1)\mu=y'_1-y_1 \end{cases}
{(x2−x1)λ+(x2′−x1′)μ=x1′−x1(y2−y1)λ+(y2′−y1′)μ=y1′−y1
经求解,另
K
=
(
x
2
−
x
1
)
(
y
2
′
−
y
1
′
)
−
(
y
2
−
y
1
)
(
x
2
′
−
x
1
′
)
K=(x_2-x_1)(y'_2-y'_1)-(y_2-y_1)(x'_2-x'_1)
K=(x2−x1)(y2′−y1′)−(y2−y1)(x2′−x1′)
可得:
λ
=
[
(
x
1
′
−
x
1
)
(
y
2
′
−
y
1
′
)
−
(
y
1
′
−
y
1
)
(
x
2
′
−
x
1
′
)
]
/
K
μ
=
[
(
x
1
′
−
x
1
)
(
y
2
−
y
1
)
−
(
y
1
′
−
y
1
)
(
x
2
−
x
1
)
]
/
K
\lambda=[(x'_1-x_1)(y'_2-y'_1)-(y'_1-y_1)(x'_2-x'_1)]/K \\ \mu=[(x'_1-x_1)(y_2-y_1)-(y'_1-y_1)(x_2-x_1)]/K
λ=[(x1′−x1)(y2′−y1′)−(y1′−y1)(x2′−x1′)]/Kμ=[(x1′−x1)(y2−y1)−(y1′−y1)(x2−x1)]/K
当且仅当
0
≤
λ
≤
1
0\le\lambda\le1
0≤λ≤1 且
0
≤
μ
≤
1
0\le\mu\le1
0≤μ≤1 时,两个线段相交