已知圆上三个点坐标,求圆半径 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));

}

  

时间: 2024-10-12 22:41:11

已知圆上三个点坐标,求圆半径 r 和 圆心坐标的相关文章

已知直线上两点求直线的一般式方程

一般式方程在计算机领域的重要性 常用的直线方程有一般式 点斜式 截距式 斜截式 两点式等等.除了一般式方程,它们要么不能支持所有情况下的直线(比如跟坐标轴垂直或者平行),要么不能支持所有情况下的点(比如x坐标相等,或者y坐标相等).所以一般式方程在用计算机处理二维图形数据时特别有用. 已知直线上两点求直线的一般式方程 已知直线上的两点P1(X1,Y1) P2(X2,Y2), P1 P2两点不重合.则直线的一般式方程AX+BY+C=0中,A B C分别等于: A = Y2 - Y1 B = X1

已知直线上的两点 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 = ( (x2-x1)/b, (y2-y1)/b ) 3.求出CA的法向向量(或CB的法向向量) c = ( y0-y1, -(x0-x1) ) 4. 距离 = AC法向向量与BC向量的单位方向向量的数量积 距离d = a1 * c = ( (x2-x1)(y0-y1) - (y2-y1)(x0-x

已知平行四边形的三个点求第四个点

Long time ago Alex created an interesting problem about parallelogram. The input data for this problem contained four integer points on the Cartesian plane, that defined the set of vertices of some non-degenerate (positive area) parallelogram. Points

根据圆上三点求圆心及半径

Equation of a circle passing through 3 points (x1, y1) (x2, y2) and (x3, y3). The equation of the circle is described by the equation: After substituting the three given points which lies on the circle we get the set of equations that can be describe

已知二叉树前序和中序,求二叉树。

如题,给出二叉树的前序遍历和中序遍历,怎么还原二叉树. 假如一个二叉树的前序遍历为:12453,中序遍历为:42513.由于这颗二叉树比较简单,可以用 凑 的方法很容易凑出符合题意的二叉树(没有写这篇文章之前,我都是用这种笨方法的..尴尬). 即如图: 那么有没有一个标准的方法来推导呢?当然是有的! 我们来分析一下这棵树的前序和中序. 先看前序:12453,第一个字符"1"肯定是整棵树root节点,这不用解释.至于第二个字符以及往后的字符就没有什么可用的信息了. 再看中序:42513,

已知六条边的边长,求四面体体积

Problem Description 杭州电子科技大学即将迎来50周年的校庆,作为校庆委员会成员的我被上级要求设计一座神秘的建筑物来迎合校庆,因此我苦思冥想了一个月,终于设计出了一套方案,这座建筑物有点象古老埃及的金字塔,不过这个神秘建筑的根基是三角形的而不是矩形的,从数学的专业角度来讲,它是四面体.当我打算上交我的设计图纸的时候发现,我不知道怎么计算这个神秘建筑的体积(我知道这座建筑的各边的尺寸),于是我找来了聪明的你来帮助我解决这个难题. Input 输入文件包含6个不超过1000的实数,

已知某一天是周几 求给定的一天是周几的算法 C++实现

#include<iostream> using namespace std; struct Date{ int year,month,day; }; enum Week{ MON=1, TUE, WED, THU, FRI, SAT, SUN, }; int isLeapYear(int y) { if((y%4==0&&y%100!=0)||y%400==0)return 1; else return 0; } int DaysGone(Date d,int *restda

C++ 已知两个时间(年月日)求日期差

#include<iostream> #include <ctime> using namespace std; int main() { struct tm t1 = { 0 }; struct tm t2 = { 0 }; double seconds; t1.tm_year = 2019 - 1900; t1.tm_mon = 6; t1.tm_mday = 6;//现在时间2019,7,6 t2.tm_year = 2020 - 1900; t2.tm_mon = 5; t

Luogu-P1027 Car的旅行路线 已知三点确定矩形 + 最短路

传送门:https://www.luogu.org/problemnew/show/P1027 题意: 图中有n个城市,每个城市有4个机场在矩形的四个顶点上.一个城市间的机场可以通过高铁通达,不同城市间要通过飞机.现在问从s到t城市最少需要多少的费用. 思路: 已知矩形的三个顶点,可以用勾股定理确定斜边后,利用平行四边形原理——两对对角顶点的x之和是相同的,y之和也是相同的得到第四个顶点.然后用求最短路的dji即可. #include <algorithm> #include <iter