已知圆上三个点坐标,求圆半径 r 和 圆心坐标
问题:
已知圆上三个点坐标分别为(x1,y1)、(x2,y2)、(x3,y3)
求圆半径R和圆心坐标(X,Y)
X,Y,R为未知数,x1,y1,x2,y2,x3,y3为常数
则由圆公式:
(x1-X)²+(y1-Y)²=R² (1)式
(x2-X)²+(y2-Y)²=R² (2)式
(x3-X)²+(y3-Y)²=R² (3)式
(1)-(2),就是左边减左边,右边减右边,得到
x1²-2Xx1+X²+(y1²-2Yy1+Y²)-(x2²-2Xx2+X²)-(y2²-2Yy2+Y²)=R²-R²
整理得
x1²-x2²-2*x1*X+2*x2*X+y12-y22-2*y1*Y+2*y2*Y=0
(2)-(3)整理得:
x2²-x3²-2*x2*X+2*x3*X+y22-y32-2*y2*Y+2y3*Y=0
再整理上面两式得
(2x2-2x1)X+(2y2-2y1)Y=x2²-x1²+y2²-y1²
(2x3-2x2)X+(2y3-2y2)Y=x3²-x2²+y3²-y2²
令:
a=2x3-2x2;b=2y3-2y2;c=x3²-x2²+y3²-y2²
e = 2x2-2x1;f=2y2-2y1;g=x2²-x1²+y2²-y1²
于是有
eX+fY=g
aX+bY=c
解得
X=(gb-cf)\(eb-af)
Y=(ag-ce)\(af-be)
R=sqrt((X-x1)*(X-x1)+(Y-y1)*(Y-y1))则圆心坐标为(X,Y),半径为R
程序实现:
void Calculate_cicular(Point px1, Point px2, Point px3)
{
int x1, y1, x2, y2, x3, y3;
int a, b, c, g, e, f;
x1 = px1.x;
y1 = px1.y;
x2 = px2.x;
y2 = px2.y;
x3 = px3.x;
y3 = px3.y;
e = 2 * (x2 - x1);
f = 2 * (y2 - y1);
g = x2*x2 - x1*x1 + y2*y2 - y1*y1;
a = 2 * (x3 - x2);
b = 2 * (y3 - y2);
c = x3*x3 - x2*x2 + y3*y3 - y2*y2;
X = (g*b - c*f) / (e*b - a*f);
Y = (a*g - c*e) / (a*f - b*e);
R = sqrt((X-x1)*(X-x1)+(Y-y1)*(Y-y1)); }
已知圆上三个点坐标,求圆半径 r 和 圆心坐标的更多相关文章
- 已知ip地址和其子网掩码如何求网络号子网号主机号
已知ip地址为10.130.89.95,其子网掩码为255.255.255.224,求其网络号.子网号和主机号. 要看子网掩码变长在第几节,255.255.255.224是在第四节借了位 把224转换 ...
- 已知直线上的两点 A(x1, y1), B(x2, y2) 和另外一点 C(x0, y0),求C点到直线的距离。
数学知识太差,一点点积累,高手勿喷. 1. 先求出AB向量 a = ( x2-x1, y2-y1 ) 2. 求AB向量的单位方向向量 b = √((x2-x1)^2 + (y2-y1)^2)) a1 ...
- DS Tree 已知先序、中序 => 建树 => 求后序
参考:二叉树--前序和中序得到后序 思路历程: 在最初敲的时候,经常会弄混preorder和midorder的元素位置.大体的思路就是在preorder中找到根节点(根节点在序列的左边),然后在mid ...
- PAT 甲级 1020 Tree Traversals (25 分)(二叉树已知后序和中序建树求层序)
1020 Tree Traversals (25 分) Suppose that all the keys in a binary tree are distinct positive integ ...
- DS实验题 Order 已知父节点和中序遍历求前、后序
题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...
- 已知某一天是周几 求给定的一天是周几的算法 C++实现
#include<iostream> using namespace std; struct Date{ int year,month,day; }; enum Week{ MON=, T ...
- C++ 已知两个时间(年月日)求日期差
转载:https://blog.csdn.net/flyyufenfei/article/details/79796035 #include<iostream> #include < ...
- 2020牛客暑期多校训练营 第二场 B Boundary 计算几何 圆 已知三点求圆心
LINK:Boundary 计算几何确实是弱项 因为好多东西都不太会求 没有到很精通的地步. 做法很多,先说官方题解 其实就是枚举一个点 P 然后可以发现 再枚举一个点 然后再判断有多少个点在圆上显然 ...
- 【NX二次开发】三点画圆,三角形外心,已知三点求圆心
已知P1.P2.P3,求点O 算法:三点不在一条直线上时,通过连接任意两点,作中垂线.任意两条中垂线的交点是圆心.
随机推荐
- 【linux】Crontab 定时任务 使用实例
1 使用putty 登录linux 服务器 2 输入以下命令.查看已有的定时任务 crontab -l 3 输入 以下命令,进入定时任务文件 crontab -e 4 键盘 选择 i 键 进行输 ...
- jQuery的一些小技巧()
1.判断某元素上是否绑定了某种类型的事件 var $events = $("#foo").data("events"); if( $events &&a ...
- Linux find、grep命令详细用法
在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下:find命令 find命令的一般形式 ...
- 图论之最短路径(3)队列优化的Bellman-Ford算法(SPFA算法)
在Bellman-Ford算法中 我们可以看到大量的优化空间:如果一个点的最短路径已经确定了,那么它就不会再改变,因此不需要再处理.换句话说:我们每次只对最短路径改变了的顶点的所有出边进行操作 使用一 ...
- HUB、SPAN、TAP比较
在获取数据包进行网络分析时,常用的方法有三种:HUB.SPAN和TAP. 一 HUB HUB 很“弱智”,但这种方法却是最早的数据包获取方法.HUB是半双工的以太网设备,在广播数据包时,无法同时 ...
- hdu6386 Age of Moyu【最短路】
Age of Moyu Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) To ...
- wireshark udp 序列号 User Datagram Protocol UDP
序列号等差2^8固定首部20字节首部20+4字节数据部分1378字节片偏移0位Quick UDP Internet
- 内核通信之Netlink源码分析-用户内核通信原理
2017-07-05 本节从一个小案例入手,结合源码分析下通过netlink进行内核和用户通信的流程. 内核端 按照传统CS模式,其实内核端可以作为是服务器端,用以接收用户的请求并作出处理,但是从ne ...
- Mybatis的WHERE和IF动态
mapper.xml: <!--查询套餐产品 --> <select id="queryComboProducts" resultType="com.r ...
- Mirror--镜像使用的工作线程数
/*在SQL SERVER 2005 及以后版本中, 使用'MAXworker thread' 来配置可用的线程数,默认设置为0 ,即自动控制线程数 计算最大工作线程数: 对于32 位系统:逻辑CPU ...