平面线段相交

一、相交测试

相交成立条件:

  1. a b ⃗ 跨 立 c d ⃗ ; \vec{ab}跨立\vec{cd}; ab cd ;
  2. c d ⃗ 跨 立 a b ⃗ ; \vec{cd}跨立\vec{ab}; cd ab ;

两个条件同时成立,说明线段ab与线段cd相交。

参考下图所示
在这里插入图片描述

  1. 图(a) 段AB 与 段CD相交

A D ⃗ × A B ⃗ < 0 , 即 点 D 在 段 A B 的 左 手 边 ; \vec{AD} \times \vec{AB} < 0,即点D在段AB的左手边; AD ×AB <0,DAB;
A C ⃗ × A B ⃗ > 0 , 即 点 C 在 段 A B 的 右 手 边 ; \vec{AC} \times \vec{AB} > 0,即点C在段AB的右手边; AC ×AB >0,CAB;
即 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,ACD;
C B ⃗ × C D ⃗ > 0 , 即 点 B 在 段 C D 的 右 手 边 ; \vec{CB} \times \vec{CD} > 0,即点B在段CD的右手边; CB ×CD >0,BCD;
即 A B ⃗ 跨 立 C D ⃗ . 即\vec{AB} 跨立 \vec{CD}. AB CD .

  1. 图(b) 段EF 与 段GH不相交

E H ⃗ × E F ⃗ > 0 , 即 点 H 在 段 E F 的 右 手 边 ; \vec{EH} \times \vec{EF} > 0,即点H在段EF的右手边; EH ×EF >0,HEF;
E G ⃗ × E F ⃗ > 0 , 即 点 G 在 段 E F 的 右 手 边 ; \vec{EG} \times \vec{EF} > 0,即点G在段EF的右手边; EG ×EF >0,GEF;
即 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,EGH;
G F ⃗ × G H ⃗ > 0 , 即 点 F 在 段 G H 的 右 手 边 ; \vec{GF} \times \vec{GH} > 0,即点F在段GH的右手边; GF ×GH >0,FGH;
即 E F ⃗ 跨 立 G H ⃗ . 即\vec{EF} 跨立 \vec{GH}. EF GH .

  1. 图(c 段IJ 与 段KL相交

I L ⃗ × I J ⃗ = 0 , 即 点 L 在 段 I J 上 ; \vec{IL} \times \vec{IJ} = 0,即点L在段IJ上; IL ×IJ =0,LIJ;
I K ⃗ × I J ⃗ > 0 , 即 点 K 在 段 I J 的 右 手 边 ; \vec{IK} \times \vec{IJ} > 0,即点K在段IJ的右手边; IK ×IJ >0,KIJ;
即 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,IKL;
K J ⃗ × K L ⃗ > 0 , 即 点 J 在 段 K L 的 右 手 边 ; \vec{KJ} \times \vec{KL} > 0,即点J在段KL的右手边; KJ ×KL >0,JKL;
即 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。 ABCDAECDBFCD
∵ △ 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}|}。 AEOBFOBF 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}| SACD=0.5AE CD =0.5CA ×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}| SCDB=0.5BF CD =0.5CB ×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 =SCDBSACD=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) (OxAx,OyAy)=1+λ1(BxAx,ByAy)
可 推 出 可推出
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(BxAx)
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(ByAy)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值