一、相交测试
相交成立条件:
- a b ⃗ 跨 立 c d ⃗ ; \vec{ab}跨立\vec{cd}; ab跨立cd;
- c d ⃗ 跨 立 a b ⃗ ; \vec{cd}跨立\vec{ab}; cd跨立ab;
两个条件同时成立,说明线段ab与线段cd相交。
参考下图所示
- 图(a) 段AB 与 段CD相交
A
D
⃗
×
A
B
⃗
<
0
,
即
点
D
在
段
A
B
的
左
手
边
;
\vec{AD} \times \vec{AB} < 0,即点D在段AB的左手边;
AD×AB<0,即点D在段AB的左手边;
A
C
⃗
×
A
B
⃗
>
0
,
即
点
C
在
段
A
B
的
右
手
边
;
\vec{AC} \times \vec{AB} > 0,即点C在段AB的右手边;
AC×AB>0,即点C在段AB的右手边;
即
C
D
⃗
跨
立
A
B
⃗
.
即\vec{CD} 跨立 \vec{AB}.
即CD跨立AB.
C
A
⃗
×
C
D
⃗
<
0
,
即
点
A
在
段
C
D
的
左
手
边
;
\vec{CA} \times \vec{CD} < 0,即点A在段CD的左手边;
CA×CD<0,即点A在段CD的左手边;
C
B
⃗
×
C
D
⃗
>
0
,
即
点
B
在
段
C
D
的
右
手
边
;
\vec{CB} \times \vec{CD} > 0,即点B在段CD的右手边;
CB×CD>0,即点B在段CD的右手边;
即
A
B
⃗
跨
立
C
D
⃗
.
即\vec{AB} 跨立 \vec{CD}.
即AB跨立CD.
- 图(b) 段EF 与 段GH不相交
E
H
⃗
×
E
F
⃗
>
0
,
即
点
H
在
段
E
F
的
右
手
边
;
\vec{EH} \times \vec{EF} > 0,即点H在段EF的右手边;
EH×EF>0,即点H在段EF的右手边;
E
G
⃗
×
E
F
⃗
>
0
,
即
点
G
在
段
E
F
的
右
手
边
;
\vec{EG} \times \vec{EF} > 0,即点G在段EF的右手边;
EG×EF>0,即点G在段EF的右手边;
即
G
H
⃗
不
跨
立
E
F
⃗
.
即\vec{GH} 不跨立 \vec{EF}.
即GH不跨立EF.
G
E
⃗
×
G
H
⃗
<
0
,
即
点
E
在
段
G
H
的
左
手
边
;
\vec{GE} \times \vec{GH} < 0,即点E在段GH的左手边;
GE×GH<0,即点E在段GH的左手边;
G
F
⃗
×
G
H
⃗
>
0
,
即
点
F
在
段
G
H
的
右
手
边
;
\vec{GF} \times \vec{GH} > 0,即点F在段GH的右手边;
GF×GH>0,即点F在段GH的右手边;
即
E
F
⃗
跨
立
G
H
⃗
.
即\vec{EF} 跨立 \vec{GH}.
即EF跨立GH.
- 图(c 段IJ 与 段KL相交
I
L
⃗
×
I
J
⃗
=
0
,
即
点
L
在
段
I
J
上
;
\vec{IL} \times \vec{IJ} = 0,即点L在段IJ上;
IL×IJ=0,即点L在段IJ上;
I
K
⃗
×
I
J
⃗
>
0
,
即
点
K
在
段
I
J
的
右
手
边
;
\vec{IK} \times \vec{IJ} > 0,即点K在段IJ的右手边;
IK×IJ>0,即点K在段IJ的右手边;
即
K
L
⃗
跨
立
I
J
⃗
.
即\vec{KL} 跨立 \vec{IJ}.
即KL跨立IJ.
K
I
⃗
×
K
L
⃗
<
0
,
即
点
I
在
段
K
L
的
左
手
边
;
\vec{KI} \times \vec{KL} < 0,即点I在段KL的左手边;
KI×KL<0,即点I在段KL的左手边;
K
J
⃗
×
K
L
⃗
>
0
,
即
点
J
在
段
K
L
的
右
手
边
;
\vec{KJ} \times \vec{KL} > 0,即点J在段KL的右手边;
KJ×KL>0,即点J在段KL的右手边;
即
I
J
⃗
跨
立
K
L
⃗
.
即\vec{IJ} 跨立 \vec{KL}.
即IJ跨立KL.
二、 求取交点
假定段AB交段CD,考虑下图所示:
设
段
A
B
交
段
C
D
,
A
E
⊥
C
D
,
B
F
⊥
C
D
。
设 段AB交段CD,AE\bot CD,BF\bot CD。
设段AB交段CD,AE⊥CD,BF⊥CD。
∵
△
A
E
O
∼
△
B
F
O
,
∴
∣
A
E
⃗
∣
∣
B
F
⃗
∣
=
∣
A
O
⃗
∣
∣
B
O
⃗
∣
。
\because \bigtriangleup{AEO} \sim \bigtriangleup{BFO},\therefore \frac{|\vec{AE}|}{|\vec{BF}|} = \frac{|\vec{AO}|}{|\vec{BO}|}。
∵△AEO∼△BFO,∴∣BF∣∣AE∣=∣BO∣∣AO∣。
又
∵
S
△
A
C
D
=
0.5
∗
∣
A
E
⃗
∣
∗
∣
C
D
⃗
∣
=
0.5
∗
∣
C
A
⃗
×
C
D
⃗
∣
又\because S_{\bigtriangleup{ACD}} = 0.5 * |\vec{AE}| * |\vec{CD}|=0.5 * |\vec{CA} \times \vec{CD}|
又∵S△ACD=0.5∗∣AE∣∗∣CD∣=0.5∗∣CA×CD∣
且
S
△
C
D
B
=
0.5
∗
∣
B
F
⃗
∣
∗
∣
C
D
⃗
∣
=
0.5
∗
∣
C
B
⃗
×
C
D
⃗
∣
且S_{\bigtriangleup{CDB}} = 0.5 * |\vec{BF}| * |\vec{CD}| = 0.5 * |\vec{CB} \times \vec{CD}|
且S△CDB=0.5∗∣BF∣∗∣CD∣=0.5∗∣CB×CD∣
∴
λ
=
∣
A
O
⃗
∣
∣
B
O
⃗
∣
=
S
△
A
C
D
S
△
C
D
B
=
∣
C
A
⃗
×
C
D
⃗
∣
∣
C
B
⃗
×
C
D
⃗
∣
\therefore \lambda =\frac{|\vec{AO}|}{|\vec{BO}|}=\frac{S_\bigtriangleup{ACD}}{S_\bigtriangleup{CDB}} = \frac{|\vec{CA} \times \vec{CD}|}{|\vec{CB} \times \vec{CD}|}
∴λ=∣BO∣∣AO∣=S△CDBS△ACD=∣CB×CD∣∣CA×CD∣
∴
A
O
⃗
=
λ
O
B
⃗
\therefore \vec{AO} = \lambda\vec{OB}
∴AO=λOB
∴
A
B
⃗
=
A
O
⃗
+
O
B
⃗
=
A
O
⃗
+
λ
A
O
⃗
=
(
1
+
λ
)
A
O
⃗
\therefore \vec{AB} = \vec{AO} + \vec{OB} = \vec{AO} + \lambda\vec{AO}=(1+\lambda)\vec{AO}
∴AB=AO+OB=AO+λAO=(1+λ)AO
∴
A
O
⃗
=
1
1
+
λ
A
B
⃗
\therefore \vec{AO}= \frac{1}{1+\lambda}\vec{AB}
∴AO=1+λ1AB
即
即
即
(
O
x
−
A
x
,
O
y
−
A
y
)
=
1
1
+
λ
(
B
x
−
A
x
,
B
y
−
A
y
)
(O_x-A_x,O_y-A_y) = \frac{1}{1+\lambda}(B_x-A_x,B_y-A_y)
(Ox−Ax,Oy−Ay)=1+λ1(Bx−Ax,By−Ay)
可
推
出
可推出
可推出
O
x
=
A
x
+
1
1
+
λ
(
B
x
−
A
x
)
O_x = A_x + \frac{1}{1+\lambda}(B_x-A_x)
Ox=Ax+1+λ1(Bx−Ax)
O
y
=
A
y
+
1
1
+
λ
(
B
y
−
A
y
)
O_y = A_y + \frac{1}{1+\lambda}(B_y-A_y)
Oy=Ay+1+λ1(By−Ay)