二维几何计算-直线与圆、二次曲线交点计算


1.直线与二次曲线交点

1.1 方程

二次曲线: X T A X + B T X + c = 0 ⋯ ( 1 ) X^TAX+B^TX+c = 0\cdots (1) XTAX+BTX+c=0(1),
直线: X ( t ) = P + t d ⃗ ⋯ ( 2 ) X(t) = P+t \vec{d}\cdots(2) X(t)=P+td 2

1.2 交点

直接将(2)直接带入(1)可得:
X ( t ) T A X ( t ) + B T X ( t ) + c = 0 X(t)^TAX(t)+B^TX(t)+c = 0 X(t)TAX(t)+BTX(t)+c=0
= > ( d ⃗ T A d ⃗ ) t 2 + d ⃗ T ( 2 A P + B ) t + ( P T A P + B T + c ) = 0 =>(\vec{d}^TA\vec{d})t^2+\vec{d}^T(2AP+B)t+(P^TAP+B^T+c) = 0 =>(d TAd )t2+d T(2AP+B)t+(PTAP+BT+c)=0
= > e 2 t 2 + e 1 t + e 0 = 0 =>e_2t^2+e_1t+e_0 = 0 =>e2t2+e1t+e0=0
此时,通过对二次根判别式进行求解,当然如果只是要做根判别计算的话,可以免去平方根计算,提高计算效率。

1.3 关于射线,线段

同理1.2 我们可以在考虑定以域后自行去推理。

2.直线与圆交点计算

2.1方程

Circle: ∥ X − C ∥ 2 = r 2 ⋯ ( 1 ) \left \| X-C\right \|^2=r^2 \cdots(1) XC2=r2(1)
Line : X ( t ) = P + t d ⃗ ⋯ ( 2 ) X(t)=P+t \vec{d}\cdots(2) X(t)=P+td (2)

2.2 交点

将(2) 带入(1) 可得:
∥ d ⃗ ∥ 2 t 2 + 2 ∥ d ⃗ ∥ △ ⃗ t + ∥ △ ⃗ ∥ 2 − r 2 = 0 \left \| \vec{d}\right \|^2t^2+2\left \| \vec{d}\right \| \vec{\bigtriangleup }t+\left \| \vec{\bigtriangleup}\right \|^2-r^2=0 d 2t2+2 d t+ 2r2=0
其中 △ ⃗ = P − C \vec{\bigtriangleup}=P-C =PC
可以通过二次求根公式求出交点:
t = − d ⃗ ⋅ △ ⃗ ± ( d ⃗ ⋅ △ ⃗ ) 2 − ∥ △ ⃗ ∥ 2 ( ∥ △ ⃗ ∥ 2 − r 2 ) ∥ d ⃗ ∥ 2 t= \frac{-\vec{d}\cdot\vec{\bigtriangleup}\pm \sqrt{(\vec{d}\cdot\vec{\bigtriangleup})^2-\left \| \vec{\bigtriangleup}\right \|^2(\left \| \vec{\bigtriangleup}\right \|^2-r^2)}} {\left \|\vec{d}\right \|^2} t= d 2d ±(d )2 2( 2r2)
δ = ( d ⃗ ⋅ △ ⃗ ) 2 − ∥ △ ⃗ ∥ 2 ( ∥ △ ⃗ ∥ 2 − r 2 ) \delta =(\vec{d}\cdot\vec{\bigtriangleup})^2-\left \| \vec{\bigtriangleup}\right \|^2(\left \| \vec{\bigtriangleup}\right \|^2-r^2) δ=(d )2 2( 2r2)。若 δ < 0 \delta<0 δ<0,则不相交;若等于0,则有一个交点;若大于0,则有2个交点。

2.3 考虑直线为射线的情况

在我们求出t值后,需要做t>0判断即可。

2.4 考虑直线为线段情况

线段方程: P 0 + t d ⃗ = 0 , d ⃗ = P 1 − P 0 P_0+t\vec{d}=0,\vec{d}=P_1-P_0 P0+td =0,d =P1P0,判断 t ∈ [ 0 , 1 ] t\in[0,1] t[0,1]

2.5 考虑圆为圆弧的case

若有交点K,弧线AB应与K在直线AB的同一侧,如下:
在这里插入图片描述
判断依据为: K R ( K − A , B − A ) ≥ 0 KR(K-A,B-A)\ge0 KR(KA,BA)0,KR定义参照

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值