问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

利用圆上两点和圆半径求解圆心坐标

创作时间:
作者:
@小白创作中心

利用圆上两点和圆半径求解圆心坐标

引用
CSDN
1.
https://blog.csdn.net/weixin_41512747/article/details/140013977

已知圆上两点P1,P2,坐标依次为$(x_1,y_1)$和$(x_2,y_2)$,圆的半径为$r$,求圆心的坐标。

假设P1,P2为任意两点,则两点连成线段的中点坐标是:

$$
x_{mid} = \frac{x_1+x_2}{2}
$$

$$
y_{mid} = \frac{y_1+y_2}{2}
$$

P1,P2连线的斜率是:

$$
k = \frac{y_1-y_2}{x_1-x_2}
$$

P1,P2连线的垂线斜率为:

$$
m = -\frac{1}{k}
$$

则,圆心所在的直线方程是:

$$
y - y_{mid} = m \cdot (x - x_{mid})
$$

圆心$(x_0, y_0)$同时满足:

$$
(x_0-x_1)^2+(y_0-y_1)^2=r^2
$$

$$
y_0-y_{mid} = m \cdot (x_0 - x_{mid})
$$

$$
(x_0-x_2)^2+(y_0-y_2)^2=r^2
$$

$$
y_0-y_{mid} = m \cdot (x_0 - x_{mid})
$$

将直线方程:

$$
y_0 = m \cdot (x_0 - x_{mid}) - y_{mid}
$$

代入圆的公式,得到:

$$
(x_0-x_1)^2+[m \cdot (x_0-x_{mid})+y_{mid}-y_1]^2=r^2
$$

展开:

$$
x_0^2-2x_0x_1+x_1^2+m^2x_0^2+2mx_0 \cdot (y_{mid}-m \cdot x_{mid}-y_1)+(y_{mid}-m \cdot x_{mid}-y_1)^2=r^2
$$

整理:

$$
(1+m^2)x_0^2+[2m(y_{mid}-m \cdot x_{mid}-y_1)-2x_1] \cdot x_0+(y_{mid}-m \cdot x_{mid}-y_1)^2+x_1^2-r^2 = 0
$$

令:

$$
A = 1+m^2
$$

$$
B = 2m(y_{mid}-m \cdot x_{mid}-y_1)-2x_1
$$

$$
C = (y_{mid}-m \cdot x_{mid}-y_1)^2+x_1^2-r^2
$$

则:

$$
x_0=\frac{-B± \sqrt{B^2-4AC}}{2A}
$$

$$
y_0= m \cdot (x_0-x_{mid})+y_{mid}
$$

下面是Python代码实现:

x_1 = 2
y_1 = 4
x_2 = 4
y_2 = 2
r = 2

if (x_1 - x_2 == 0):
    print('横坐标相同,求解可能出错')
else:
    x_mid = (x_1 + x_2) / 2
    y_mid = (y_1 + y_2) / 2
    k = (y_1-y_2)/(x_1-x_2)
    m = -1/k
    A = 1 + m**2
    B = 2 * m *(y_mid - m * x_mid - y_1)- 2 * x_1
    C = (y_mid - m * x_mid - y_1)**2 + x_1**2 - r**2
    print(A, B, C)
    x_c1 = (-B + ((B**2-4*A*C)**0.5))/(2*A)
    x_c2 = (-B - ((B**2-4*A*C)**0.5))/(2*A)
    y_c1 = m * (x_c1 - x_mid) + y_mid
    y_c2 = m * (x_c2 - x_mid) + y_mid
    print('圆心坐标:',(x_c1,y_c1))
    print('圆心坐标:',(x_c2,y_c2))

运行结果:

圆心坐标: (3.0, 3.0)
圆心坐标: (3.0, 3.0)

这表明,给定的圆上两点和半径条件下,圆心坐标为(3.0, 3.0)。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号