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

已知圆上两点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.mzph.cn/bicheng/36750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TS-常量枚举

如果使用普通的数值枚举或字符串枚举,在编译成JavaScript代码后会产生较多代码来支持各项功能,开销较大且可读性较差,而且很可能被人误用。例如,使用索引查找或反向映射会导致可读性进一步变差,出错率进一步提高。 要解…

qt 实现对字体高亮处理原理

在Qt中实现对文本的字体高亮处理,通常涉及到使用QTextDocument、QTextCharFormat和QSyntaxHighlighter。下面是一个简单的例子,演示如何为一个文本编辑器(假设是QTextEdit)添加简单的关键词高亮功能: 步骤 1: 定义关键…

redis sentinel 部署

安装Redis 建议版本不要太低 > 6.2,我这里是redis 7.2.5 curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by/usr/share/keyrings/redis-archive-keyring.gpg] http…

Git Flow 工作流学习要点

Git Flow 工作流学习要点 Git Flow — 流程图Git Flow — 操作指令优点:缺点:Git Flow 分支类型Git Flow 工作流程简述关于 feature 分支关于 Release 分支关于 hotfix 分支 总结 Git Flow — 流程图 图片来源:https://nvie.com/posts/a-succ…

vue全局方法plugins/utils

一、在src目录下创建一个plugins文件夹 test.ts文件存放创建的方法,index.ts用于接收所有自定义方法进行统一处理 二、编写自定义方法 // test.ts文件 export default {handleTest(val1: number, val2: number) {// 只是一个求和的方法return val1 val2;}, };三…

vue3 【提效】使用 CSS 框架 UnoCSS 实用教程

该换种更高效的方式写 CSS 啦&#xff0c;举个例&#xff1a; <div class"flex"> </div>相当于 <div class"flex"> </div> <style> .flex {display: flex; } </style>当然&#xff0c;还有超多强大的功能帮我们提升…

江科大笔记—FLASH闪存

FLASH闪存 程序现象&#xff1a; 1、读写内部FLASH 这个代码的目的&#xff0c;就是利用内部flash程序存储器的剩余空间&#xff0c;来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据&#xff0c;然后存储到内部FLASH&#xff0c;按下K2把所有参数清0&…

注册中文网址(中文域名)有什么用?

随着互联网的全球普及&#xff0c;域名系统作为网络空间的门牌号&#xff0c;其重要性不言而喻。长久以来&#xff0c;英文域名占据了主导地位&#xff0c;但随着国际化域名&#xff08;IDN&#xff0c;Internationalized Domain Name&#xff09;技术的发展&#xff0c;注册中…

检索增强生成RAG系列2--提高RAG准确度的关键点

上一章讲到了RAG的基本流程&#xff0c;但是如果只是完成一个基本流程&#xff0c;想要在商业上使用还是不行&#xff0c;因为正常商业上的使用其准确度至少有个90%甚至更高。那么如何提高RAG的准确度&#xff0c;那么需要看看RAG有哪些关键点。 目录 1 RAG结构图2 文档处理3 …

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&a…

前端面试题(基础篇十一)

一、DOCTYPE 的作用是什么&#xff1f; <!DOCTYPE> 声明一般位于文档的第一行&#xff0c;它的作用主要是告诉浏览器以什么样的模式来解析文档。一般指定了之后会以标准模式来进行文档解析&#xff0c;否则就以兼容模式进行解析。在标准模式下&#xff0c;浏览器的解析规…

速盾:ddos高防ip是什么?

DDoS攻击是一种通过向目标网络发送大量的无效请求&#xff0c;以致其无法正常运作的攻击方式。这种攻击方式广泛应用于各种网络服务&#xff0c;如网站、服务器、游戏等。由于DDoS攻击可以导致被攻击的网络瘫痪&#xff0c;因此许多组织和个人都开始关注网络安全&#xff0c;并…

什么是C++模块化系统?C++20的模块化系统。

C20引入的模块化系统是一种新的代码组织和编译机制&#xff0c;它旨在替代传统的头文件机制&#xff0c;提供更好的代码组织、更快的编译速度和更强的封装性。模块化系统的主要目标包括&#xff1a; 减少编译时间&#xff1a;通过减少冗余的头文件解析和宏定义传播&#xff0c…

Nest使用multer实现文件上传,并实现大文件分片上传(下)

上节我们学了在 Express 里用 multer 包处理 multipart/form-data 类型的请求中的 file。 单个、多个字段的单个、多个 file 都能轻松取出来。 接下来我们就来学习一下在Nest 里使用multer。 一,Nest如何使用multer实现文件上传 首先我们先创建一个Nest项目&#xff1a; nest…

性能测试4【搬代码】

性能测试4与性能测试3最后的 三、性能瓶颈分析和性能调优 (1)基准测试 (2)负载测试 (3)压力测试 (4)浪涌测试 (5)容量测试 有关&#xff0c;需要结合看 性能瓶颈分析和性能调优 (1)基准测试 一般是单接口&#xff08;单交易&#xff09;&#xff1a;使用一个用持续压测1min以…

【Linux系列】Fedora40安装VMware Workstation Pro报错

问题描述 由于Fedora 40使用的Linux内核是6.9,导致安装VMware Workstation Pro 时&#xff0c;安装依赖无法成功&#xff0c;具体报错如下 ..................CC [M] /tmp/modconfig-a8Fcf5/vmnet-only/smac.oCC [M] /tmp/modconfig-a8Fcf5/vmnet-only/vnetEvent.oCC [M] …

液体粒子计数器的原理及常见型号选择 lighthouse代理商北京中邦兴业

​液体颗粒计数用于测量液体样品中颗粒的大小和分布。通过用激光二极管照射液体样品并检测散射光来测量颗粒分布和尺寸。散射光的性质与粒子大小的大小有关。液体颗粒计数器可用于批量取样或在线&#xff08;连续监测&#xff09;应用&#xff0c;如水处理厂&#xff0c;或用于…

【封装】Unity编辑器模式GUID加载资源

介绍 在编辑器模式下通过GUID获取工程目录下的指定资源的接口工具封装 工具原理 借助AssetDatabaseAPI FindAssets : 获取 GUID GUIDToAssetPath : 通过GUID获取路径LoadAssetAtPath<T>: 通过路径加载资源 代码&#xff1a; public static class GetAssetUtil {pub…

ADC位数、增益调制与参考电压

位数&#xff1a;12bit、10bit、8bit 一般就是对应的ADC值分别为&#xff1a;4095、1023、255&#xff0c;也就选用对应位数时ADC的最大值。 增益的作用 增益设置用于放大或缩小输入信号&#xff0c;使其适配到ADC的输入范围。增益设置可以通过配置SAADC的通道配置寄存器来实…

Vscode lanuch.json

Intro 使用launch.json 能够方便的运行需要传很多参数的代码文件 如下&#xff1a; import math import argparse # 1、导入argpase包def parse_args():parse argparse.ArgumentParser(descriptionCalculate cylinder volume) # 2、创建参数对象parse.add_argument(--rad…