由圆上两点和半径,求圆心❤️原理与C++实现

Posted 没事就要敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由圆上两点和半径,求圆心❤️原理与C++实现相关的知识,希望对你有一定的参考价值。

文章目录


以圆: ( x − 1 ) 2 + ( y − 2 ) 2 = 16 (x-1)^2+(y-2)^2=16 (x1)2+(y2)2=16 为例,输入圆上两点,返回两个圆心坐标,两个圆心关于圆上两点连线对称,输出结果如下:

->圆心1(-2.27005, 5.31082)
->圆心2(0.999999, 2)

1 原理

已知圆的圆心 O ( x 0 , y 0 ) O(x_0,y_0) O(x0,y0),半径 r r r,则圆的标准方程为:
( x − x 0 ) 2 + ( y − y 0 ) 2 = r 2 (x-x_0)^2+(y-y_0)^2=r^2 (xx0)2+(yy0)2=r2

随机选取圆上两个点 p 1 , p 2 p1,p2 p1,p2,结合半径 r r r,可以求得两个圆心,且两个圆心关于直线 p 1 p 2 p1p2 p1p2 对称。


其实这就是一个简单的数学方程求解问题,将两点 p 1 ( x 1 , y 1 ) , p 2 ( x 2 , y 2 ) p_1(x_1,y_1),p_2(x_2,y_2) p1(x1,y1),p2(x2,y2) 代入圆方程得,
{ ( x 1 − x 0 ) 2 + ( y 1 − y 0 ) 2 = r 2 ( x 2 − x 0 ) 2 + ( y 2 − y 0 ) 2 = r 2 \\begin{cases} (x_1-x_0)^2+(y_1-y_0)^2=r^2\\\\ (x_2-x_0)^2+(y_2-y_0)^2=r^2\\\\ \\end{cases} {(x1x0)2+(y1y0)2=r2(x2x0)2+(y2y0)2=r2
两式相减得,
x 1 2 − x 2 2 + y 1 2 − y 2 2 + 2 x 0 ( x 2 − x 1 ) + 2 y 0 ( y 2 − y 1 ) = 0 x_1^2-x_2^2+y_1^2-y_2^2+2x_0(x_2-x_1)+2y_0(y_2-y_1)=0 x12x22+y12y22+2x0(x2x1)+2y0(y2y1)=0
易得,
x 0 = x 2 2 − x 1 2 + y 2 2 − y 1 2 − 2 y 0 ( y 2 − y 1 ) 2 ( x 2 − x 1 ) = x 2 2 − x 1 2 + y 2 2 − y 1 2 2 ( x 2 − x 1 ) − y 2 − y 1 x 2 − x 1 y 0 x_0=\\cfrac{x_2^2-x_1^2+y_2^2-y_1^2-2y_0(y_2-y_1)}{2(x_2-x_1)}=\\cfrac{x_2^2-x_1^2+y_2^2-y_1^2}{2(x_2-x_1)}-\\cfrac{y_2-y_1}{x_2-x_1}y_0 x0=2(x2x1)x22x12+y22y122y0(y2y1)=2(x2x1)x22x12+y22y12x2x1y2y1y0
t 1 = x 2 2 − x 1 2 + y 2 2 − y 1

以上是关于由圆上两点和半径,求圆心❤️原理与C++实现的主要内容,如果未能解决你的问题,请参考以下文章

c语言给出半径圆心求圆上的点

已知一个圆经过三点,怎样求圆心坐标啊?

编写一个c程序,输入圆心坐标和半径,输出圆上所有的点。急!!!

d3.js画圆弧和圆的坐标、弧长计算方法

假设圆心在(0,0)半径为0.5的圆。现有坐标(x,y),如何判断坐标是不是在圆内或圆上?有啥好公式吗?

hdu6354 /// 圆的相交