已知圓上的兩點座標和半徑,求圓心。數學分析:這個題目,涉及到簡單的數學問題,但是計算比較繁瑣。
假設已知圓上的兩點座標分別為n(x1,y1)和m(x2,y2),半徑為r,圓心座標為o(a,b),根據數學知識可得到:
(x1-a)^2 + (y1-b)^2 = r^2----(1)式
(x2-a)^2 + (y2-b)^2 = r^2----(2)式
分別展開上述兩個式子得到
(x1)^2 - 2*x1*a + a^2 + (y1)^2 - 2*y1*b + b^2 = r^2 ----(3)式
(x2)^2 - 2*x2*a + a^2 + (y2)^2 - 2*y2*b + b^2 = r^2 ----(4)式
(3)式 - (4)式
得到:x1^2 - x2^2 + 2*(x2-x1)*a + y1^2 - y2^2 + 2*(y2-y1)*b = 0
變形得到:
a = (x2^2 - x1^2 + y2^2 - y1^2)/2/(x2-x1) - (y2-y1)/(x2-x2) * b
設:c1 = (x2^2 - x1^2 + y2^2 - y1^2)/2/(x2-x1)
設:c2 = (y2-y1)/(x2-x2)
a = c1 - c2 * b ----(5)式
把(5)式代入(1)式,得到;
x1^2 - 2*x1*(c1-c2*b) + (c1-c2*b)^2 + y1^2 -2*y1*b + b^2 = r^2
展開簡化為關於b的一元二次方程一般形式;
(c2^2+1)*b^2 + (2*x1*c1-2*c1*c2-2*y1)*b + x1^2-2*x1*c1+c1^2+y1^2-r^2 = 0
得到求b的方程組二次項係數:a = (c2^2+1)
一次項係數:b = (2*x1*c1-2*c1*c2-2*y1)
常數項: c = x1^2-2*x1*c1+c1^2+y1^2-r^2
已知兩點座標和半徑求圓心座標程式#include
#include
#include
using
namespace
std;
ofstream fout;
typedef
struct
point;
double y_coordinates(double x,double y,double k,double x0);//
4個引數
void circle_center(point p1,point p2,double
dradius);
bool data_validation(point p1,point p2,double
dradius);
void readdata(point &p1,point &p2,double &dradius);
void
main()
void circle_center(point p1,point p2,double
dradius)
else
fout
<< center1.x << "
"<< center1.y
<< center2.x << "
"<< center2.y <}double y_coordinates(double x,double y,double k,double
x0)bool data_validation(point p1,point p2,double
dradius)
if((2 * dradius) >=ddistance)
return
true
;
else
}void readdata(point &p1,point &p2,double &dradius)
}
已知兩點座標和半徑,求圓心
已知圓上的兩點座標和半徑,求圓心。數學分析 這個題目,涉及到簡單的數學問題,但是計算比較繁瑣。假設已知圓上的兩點座標分別為n x1,y1 和m x2,y2 半徑為r,圓心座標為o a,b 根據數學知識可得到 x1 a 2 y1 b 2 r 2 1 式 x2 a 2 y2 b 2 r 2 2 式 分別...
C 已知兩點及半徑,求圓心座標
已知a點和b點及半徑,其中b點為所在圓的切點,求該圓心座標 float radius 半徑 float angleo 圓心角 vector3 m yuanxin 圓心座標 計算圓心座標 a點 第一點 b點 第二點,即切點 半徑 void calculateo listve else if ve 0 ...
筆記 已知圓上兩點座標和半徑,求圓心
參考了一下這個博主的部落格 已知兩點座標 x1,y1 x2,y2 和半徑r,求圓心座標 x0,y0 程式設計驗證演算法 具體例子 已知 2,4 4,2 半徑r 2,求圓心 include stdafx.h include include using namespace std void circle...