已知三点求圆的方程的c语言编程

已知三点求圆的方程的c语言编程,第1张

/***************

*

已知三点求圆的

get_circle()

函数

*

x1,

y1为第一个点的坐标,以此类推

*

r为求出的半径,x0,

y0为圆心坐标

*

调用函数之前应先检查三点是否共线

否则会d出被零除的错误

***************/

#

include

void

get_circle(double

x1,

double

y1,

double

x2,

double

y2,

double

x3,

double

y3,

double*

r,

double*

x0,

double*

y0)

{

double

m1,

n1,

m2,

n2,

a1,

b1,

a2,

b2

m1

=

(x1

+

x3)

/

2

n1

=

(y1

+

y3)

/

2

m2

=

(x2

+

x3)

/

2

n2

=

(y2

+

y3)

/

2

a1

=

(y3

-

y1)

/

(x3

-

x1)

b1

=

n1

-

a1*m1

a2

=

(y3

-

y2)

/

(x3

-

x2)

b2

=

n2

-

a2*m2

*x0

=

(b2

-

b1)

/

(a1

-

a2)

*y0

=

a1

*

*x0

+

b1

*r

=

sqrt((x1-x0)*(x1-x0)

+

(y1-y0)*(y1-y0))

return

}

希望对你有帮助!

三点求圆应当是在坐标中考虑的问题,因此首先需要明确圆的公式有:(x-a)^2+(y-b)^2=r^2(此为标准公式);x^2+y^2+Dx+Ey+F=0(此为一般公式)。三点设为(x1,y1)、(x2,y2)、(x3,y3),代入一般公式后即可得到,半径R=根号下(D^2+E^2-4F)/2,圆心O坐标为(-D/2,-E/2),再将R和O代入标准公式后即为答案。

其他方法:

1、用直线方程解出R和O,三点求圆是外接圆问题,圆心在两条中垂线的交点处,故先用两点间距离得出直线方程,再运用中垂线特征,K1*K2=-1以及两点求中点,得出一条中垂线的直线方程,同理得出第二条中垂线的直线方程,将两条直线方程求解,得到圆心坐标,在三点中随意选一个点与圆心O求一个两点间距离即为R,代入标准方程即得圆方程。

2、在学习坐标系后,圆的问题都可以在坐标中解决,只要抓住半径R和圆心O即可,因为在标准公式和一般公式中,都只有三个未知量需要确定,故而三个方程是一定可以解决问题。一般公式的优势在于变量都在一次方上,所以代入一般要用一般公式;而标准公式在于当R是0时,就只有两个变量,就变成了最简单的二元二次方程问题。只要分析题中的信息得到两个公式,便可以解决问题。

#include<iostream.h>

#include<math.h>

int main()

{

int x1,y1,x3,y3

double a,b,c,d,e,f

double r,k1,k2,x,y,x2,y2

cout<<"请输入x1,y1,x2,y2,x3,y3"<<endl

cin>>x1>>y1>>x2>>y2>>x3>>y3

k1=1,k2=2

if((y1==y2)&&(y2==y3))

{

cout<<"三点不构成圆!"<<endl

return 0

}

if((y1!=y2)&&(y2!=y3))

{

k1=(x2-x1)/(y2-y1)

k2=(x3-x2)/(y3-y2)

}

if(k1==k2)

{

cout<<"三点不构成圆!"<<endl

return 0

}

a=2*(x2-x1)

b=2*(y2-y1)

c=x2*x2+y2*y2-x1*x1-y1*y1

d=2*(x3-x2)

e=2*(y3-y2)

f=x3*x3+y3*y3-x2*x2-y2*y2

x=(b*f-e*c)/(b*d-e*a)

y=(d*c-a*f)/(b*d-e*a)

cout<<"圆心为("<<x<<","<<y<<")"<<endl

r=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))

cout<<"半径为"<<r<<endl

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7778080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存