当前位置: 首页 > news >正文

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

已知圆上两点P1,P2,坐标依次为 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2),圆的半径为 r r r,求圆心的坐标。
在这里插入图片描述
假定P1,P2为任意两点,则两点连成线段的中点坐标是
x m i d = ( x 1 + x 2 ) / 2 x_{mid} = (x_1+x_2)/2 xmid=(x1+x2)/2
y m i d = ( y 1 + y 2 ) / 2 y_{mid} = (y_1+y_2)/2 ymid=(y1+y2)/2
P1,P2连线的斜率是
k = ( y 1 − y 2 ) / ( x 1 − x 2 ) k = (y_1-y_2)/(x_1-x_2) k=(y1y2)/(x1x2)
P1,P2连线的垂线斜率为
m = − 1 / k m = -1/k m=1/k
则,圆心所在的直线方程是
y − y m i d = m ∗ ( x − x m i d ) y-y_{mid} = m * (x - x_{mid}) yymid=m(xxmid)

圆心 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)同时满足
( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 = r 2 (x_0-x_1)^2+(y_0-y_1)^2=r^2 (x0x1)2+(y0y1)2=r2 y 0 − y m i d = m ∗ ( x 0 − x m i d ) y_0-y_{mid} = m * (x_0 - x_{mid}) y0ymid=m(x0xmid)

( x 0 − x 2 ) 2 + ( y 0 − y 2 ) 2 = r 2 (x_0-x_2)^2+(y_0-y_2)^2=r^2 (x0x2)2+(y0y2)2=r2 y 0 − y m i d = m ∗ ( x 0 − x m i d ) y_0-y_{mid} = m * (x_0 - x_{mid}) y0ymid=m(x0xmid)

将直线方程
y 0 = m ∗ ( x 0 − x m i d ) − y m i d y_0 = m*(x_0 -x_{mid})-y_{mid} y0=m(x0xmid)ymid
代入圆的公式,
得到
( x 0 − x 1 ) 2 + [ m ∗ ( x 0 − x m i d ) + y m i d − y 1 ] 2 = r 2 (x_0-x_1)^2+[m * (x_0-x_{mid})+y_{mid}-y_1]^2=r^2 (x0x1)2+[m(x0xmid)+ymidy1]2=r2

展开,
x 0 2 − 2 x 0 x 1 + x 2 2 + m 2 x 0 2 + 2 m x 0 ∗ ( y m i d − m ∗ x m i d − y 1 ) + ( y m i d − m ∗ x m i d − y 1 ) 2 = r 2 x_0^2-2x_0x_1+x_2^2+m^2x_0^2+2mx_0*(y_{mid}-m*x_{mid}-y_1)+(y_{mid}-m*x_{mid}-y_1)^2=r^2 x022x0x1+x22+m2x02+2mx0(ymidmxmidy1)+(ymidmxmidy1)2=r2

整理,
( 1 + m 2 ) x 0 2 + [ 2 m ( y m i d − m ∗ x m i d − y 1 ) − 2 x 1 ] ∗ x 0 + ( y m i d − m ∗ x m i d − y 1 ) 2 + x 1 2 − r 2 = 0 (1+m^2)x_0^2+[2m(y_{mid}-m*x_{mid}-y_1)-2x_1]*x_0+(y_{mid}-m*x_{mid}-y_1)^2+x_1^2-r^2 = 0 (1+m2)x02+[2m(ymidmxmidy1)2x1]x0+(ymidmxmidy1)2+x12r2=0

令,
A = 1 + m 2 A= 1+m^2 A=1+m2
B = 2 m ( y m i d − m ∗ x m i d − y 1 ) − 2 x 1 B= 2m(y_{mid}-m*x_{mid}-y_1)-2x_1 B=2m(ymidmxmidy1)2x1
C = ( y m i d − m ∗ x m i d − y 1 ) 2 + x 1 2 − r 2 C= (y_{mid}-m*x_{mid}-y_1)^2+x_1^2-r^2 C=(ymidmxmidy1)2+x12r2

则,
x 0 = − B ± B 2 − 4 A C 2 A x_0=\frac{-B± \sqrt{B^2-4AC}}{2A} x0=2AB±B24AC
y 0 = m ∗ ( x 0 − x m i d ) + y m i d y_0= m*(x_0-x_{mid})+y_{mid} y0=m(x0xmid)+ymid

x_1 = 2
y_1 = 4
x_2 = 4
y_2 = 2
r = 2
if (x_1 - x_2 == 0):print('横坐标相同,求解可能出错')exit()
else:x_mid = (x_1 + x_2) / 2y_mid = (y_1 + y_2) / 2k = (y_1-y_2)/(x_1-x_2)m = -1/kA = 1 + m**2B = 2 * m *(y_mid - m * x_mid - y_1)- 2 * x_1C = (y_mid - m * x_mid - y_1)**2 + x_1**2 - r**2print(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_midy_c2 = m * (x_c2 - x_mid) + y_midprint('圆心坐标:',(x_c1,y_c1))print('圆心坐标:',(x_c2,y_c2))

运行结果:
在这里插入图片描述
InsCode

http://www.lryc.cn/news/385588.html

相关文章:

  • 从ChatGPT代码执行逃逸到LLMs应用安全思考
  • Python入门-基础知识-变量
  • 设计模式原则——接口隔离原则
  • MySQL数据库——在Centos7环境安装
  • 怎样规避液氮容器内部结霜的问题
  • 冶金工业5G智能工厂工业物联数字孪生平台,推进制造业数字化转型
  • 一文入门机器学习参数调整实操
  • 基于51单片机的银行排队呼叫系统设计
  • JXCategoryView的使用总结
  • Centos9 安装VBox增强功能问题
  • 【JVM】Java虚拟机运行时数据分区介绍
  • 大数据面试题之Kafka(2)
  • 前端面试题(基础篇十一)
  • 【论文阅读】Answering Label-Constrained Reachability Queries via Reduction Techniques
  • Git Flow 工作流学习要点
  • blender 快捷键 常见问题
  • HTTP详解:TCP三次握手和四次挥手
  • 详解HTTP:有了HTTP,为何需要WebSocket?
  • Spring Boot 启动流程是怎么样的
  • 【学习笔记】数据结构(三)
  • 学习python笔记:10,requests,enumerate,numpy.array
  • 经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2)
  • MySQL库与表的操作
  • TTS 语音合成技术学习
  • 小公司做自动化的困境
  • 基于pytorch框架的手写数字识别(保姆级教学)
  • 注意力机制在大语言模型中的应用
  • qt 实现对字体高亮处理原理
  • SAP中通过财务科目确定分析功能来定位解决BILLING问题实例
  • 充电站,正在杀死加油站