二维几何计算-两个圆的交点


1.方程:

两个圆方程为: ∥ X − C i ∥ 2 = r i 2 ⋯ ( 1 ) \left \| X-C_i \right \|^2=r_i^2\cdots(1) XCi2=ri2(1)

2.交点分析:

可以设 u ⃗ = C 1 − C 0 = ( u 0 , u 1 ) , d e f i n e : v ⃗ = ( u 1 , − u 0 ) \vec{u}=C_1-C_0=(u_0,u_1),define: \vec{v}=(u_1,-u_0) u =C1C0=(u0,u1),define:v =(u1,u0)
有: ∥ u ⃗ ∥ 2 = ∥ v ⃗ ∥ 2 = ∥ C 1 − C 0 ∥ 2 , u ⃗ ⋅ v ⃗ = 0. \left \| \vec{u} \right \|^2=\left \| \vec{v} \right \|^2=\left \| C_1-C_0 \right \|^2,\vec{u}\cdot\vec{v}=0. u 2=v 2=C1C02,u v =0.
设交点为: X = C 0 + s u ⃗ + t v ⃗ X=C_0+s\vec{u}+t\vec{v} X=C0+su +tv ,也可写作 X = C 1 + ( s − 1 ) u ⃗ + t v ⃗ X=C_1+(s-1)\vec{u}+t\vec{v} X=C1+(s1)u +tv
将上式分别带入式(1),可以得到:
( s 2 + t 2 ) ∥ u ⃗ ∥ 2 = r 0 2 ⋯ ( 2 ) (s^2+t^2)\left \| \vec{u} \right \|^2=r_0^2\cdots(2) (s2+t2)u 2=r02(2)
( ( s − 1 ) 2 + t 2 ) ∥ u ⃗ ∥ 2 = r 0 2 ⋯ ( 3 ) ((s-1)^2+t^2)\left \| \vec{u} \right \|^2=r_0^2\cdots(3) ((s1)2+t2)u 2=r02(3)
(2),(3)可化简为:
s = 1 2 ( r 0 2 − r 1 2 ∥ u ⃗ ∥ 2 + 1 ) ⋯ ( 4 ) s=\frac{1}{2}(\frac{r_0^2-r_1^2}{\left \| \vec{u} \right \|^2}+1)\cdots(4) s=21(u 2r02r12+1)(4)
(4)带入(2)可得:
t 2 = − ( ∥ u ⃗ ∥ 2 − ( r 0 + r 1 ) 2 ) ( ∥ u ⃗ ∥ 2 − ( r 0 − r 1 ) 2 ) 4 ∥ u ⃗ ∥ 4 t^2=-\frac{( \left \| \vec{u} \right \|^2 -(r_0+r_1)^2)(\left \| \vec{u} \right \|^2 -(r_0-r_1)^2)} {4 \left \| \vec{u} \right \|^4} t2=4u 4(u 2(r0+r1)2)(u 2(r0r1)2)
要使得上式有解,需保证分子小于0即可。

3.结论

有解条件: ( r 0 − r 1 ) 2 ≤ ∥ u ⃗ ∥ 2 ≤ ( r 0 + r 1 ) 2 (r_0-r_1)^2\le\left \| \vec{u} \right \|^2 \le(r_0+r_1)^2 (r0r1)2u 2(r0+r1)2
外切: ∥ u ⃗ ∥ 2 = ( r 0 + r 1 ) 2 \left \| \vec{u} \right \|^2 =(r_0+r_1)^2 u 2=(r0+r1)2
内切: ∥ u ⃗ ∥ 2 = ( r 0 − r 1 ) 2 \left \| \vec{u} \right \|^2 =(r_0-r_1)^2 u 2=(r0r1)2
两个圆是同一个圆: ∥ u ⃗ ∥ 2 = 0 , r 1 = r 0 \left \| \vec{u} \right \|^2=0,r_1=r_0 u 2=0r1=r0
由(4)参数值为 s , t s,t s,t,可得解: t = ± − ( ∥ u ⃗ ∥ 2 − ( r 0 + r 1 ) 2 ) ( ∥ u ⃗ ∥ 2 − ( r 0 − r 1 ) 2 ) 4 ∥ u ⃗ ∥ 4 , s = 1 2 ( r 0 2 − r 1 2 ∥ u ⃗ ∥ 2 + 1 ) t=\pm\sqrt{-\frac{( \left \| \vec{u} \right \|^2 -(r_0+r_1)^2)(\left \| \vec{u} \right \|^2 -(r_0-r_1)^2)} {4 \left \| \vec{u} \right \|^4}},s=\frac{1}{2}(\frac{r_0^2-r_1^2}{\left \| \vec{u} \right \|^2}+1) t=±4u 4(u 2(r0+r1)2)(u 2(r0r1)2) ,s=21(u 2r02r12+1)
交点为: X = C 0 + s u ⃗ + t v ⃗ X=C_0+s\vec{u}+t\vec{v} X=C0+su +tv

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VB编程大赛:求弧相交点代码 这是一个求两弧相交点的程序。界面中有图区,操作及显示区。操作分为两个步骤: 1· 创建弧" 。 点击“创建槐按钮,可进入创建弧工作状态。进入创建弧工作状态以后,光标进入有坐标线的图区变为十字线,图区的下面显示光标坐标。在适当位置点击左键,这是弧的一个端点,有一个黑点显示在那里,同时把这点显示出来。移动光标后在适当位置再次点击左键,这是上的一个点,有一个绿点显示在那里,同时把这点显示出来,同时出现一蓝色的皮筋弧在随光标移动,心点由土黄色的点来表示。皮筋弧以黑点为正向(逆时针),在适当位置再次点击左键,弧变为绿色并固定下来,把这点显示出来,这个弧就创建好了,同时把这个弧的参数显示出来。可以继续创建新的唬 2· 选取弧,当创建了两个或两个弧时,“选取槐按钮开始有效,点击“选取槐按钮,可进入选取弧工作状态。光标在接近已创建的弧时,那个弧会变成红色,点击左键,这个弧变为紫色,表示被选取的第一个唬当光标再次接近其它已创建的弧时,那个弧会变成红色,点击左键,这个弧变为黑色,表示被选取的第二个唬每次选取的弧参数都被显示出来,当选取弧了两个弧后,开始计算这时两个弧的交点并显示结果。通常有2个交点,分别用红蓝两色点表示。无效交点用灰色点表示,数据也用灰色显示。如无交点也有显示。 点击“重 新 选 缺按钮,将清除刚才的结果,可以重新选取,在运行中,下部的信息栏中显示运行状态并提示下一步的操作,由于这只是一个求两弧相交点的程序,所以只采用了在屏幕上三点(不在一条直线上)做弧的方法创建弧,略去其它方法,并且略去弧编辑、修改、删除、比例等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值