已知圆上三个点坐标,求圆半径 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 算法:三点不在一条直线上时,通过连接任意两点,作中垂线.任意两条中垂线的交点是圆心.
随机推荐
- Thinkphp3.2 PHPexcel 导出
1 下载phpexecl 放入到tp里边. 路径如下:项目根目录\ThinkPHP\Library\Org\Util 2 PHP 代码部分 封装一个方法 private function getE ...
- JS-鼠标跟随块(一个小圆点跟着鼠标跑)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Excel 中如何快速统计一列中相同字符的个数(函数法)
https://jingyan.baidu.com/article/6d704a132ea17328da51ca78.html 通过excel快速统计一列中相同字符的个数,如果很少,你可以一个一个数. ...
- CodeForces - 459E Pashmak and Graph[贪心优化dp]
E. Pashmak and Graph time limit per test 1 second memory limit per test 256 megabytes input standard ...
- shell 中的()【】{}(())
本文转自:https://blog.csdn.net/taiyang1987912/article/details/39551385 shell中各种括号的作用().(()).[].[[]].{} 一 ...
- 【BZOJ2668】[cqoi2012]交换棋子 费用流
[BZOJ2668][cqoi2012]交换棋子 Description 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列 ...
- c# Sockect 通信
1.Server using System; using System.Collections.Generic; using System.Text; //添加Socket类 using System ...
- 豆瓣api开发
前面有说过豆瓣API的开发,在做一些开源项目的时候,很多时候会用到豆瓣API接口,拿过来做测试,现在只是对豆瓣API开发做一些简单的梳理: 豆瓣API开发的接口: https://developers ...
- 树链剖分+线段树+离线(广州网选赛第八题hdu5029)
http://acm.hdu.edu.cn/showproblem.php?pid=5029 Relief grain Time Limit: 10000/5000 MS (Java/Others) ...
- 过千万、亿条数据的mysql表更新 mysql 线程状态
分段更新 UPDATE question SET `status`=1 WHERE status!=1 LIMIT 3000;UPDATE answer SET `status`=1 WHERE st ...