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

如题所述

/***************
* 已知三点求圆的 get_circle() 函数
* x1, y1为第一个点的坐标,以此类推
* r为求出的半径,x0, y0为圆心坐标
* 调用函数之前应先检查三点是否共线 否则会弹出被零除的错误
***************/
# include <math.h>
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;
}

希望对你有帮助!
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-14
/*相关子函数由一楼abccsss的代码修改而成,其中第一个和第二个点以及第二个和第三个点的连线不得经过圆心!第一个和第二个点以及第二个和第三个点的横纵坐标不得相同!*/
#include<stdio.h>
# include <math.h>
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 + x2) / 2;
n1 = (y1 + y2) / 2;
printf("\n\t第一条垂直平分线必过点为(%f,%f)",m1,n1);
m2 = (x2 + x3) / 2;
n2 = (y2 + y3) / 2;
printf("\n\t第二条垂直平分线必过点为(%f,%f)",m2,n2);
a1 = -(x2 - x1)/(y2 - y1);
b1 = n1 - a1*m1;
printf("\n\t第一条垂直平分线为y=%fx+%f",a1,b1);
a2 = -(x3 - x2)/(y3 - y2);
b2 = n2 - a2*m2;
printf("\n\t第二条垂直平分线为y=%fx+%f",a2,b2);
*x0 = (b2 - b1) / (a1 - a2);
*y0 = a1 * *x0 + b1;
*r = sqrt((x1-*x0)*(x1-*x0) + (y1-*y0)*(y1-*y0));
return;
}
typedef struct{
float x;
float y;
}bit;
main(){
printf("\n\t\t\t输入三个点以计算圆心和半径");
bit d[3];
printf("\n\t输入第一个点的坐标:");
scanf("%f,%f",&d[0].x,&d[0].y);
printf("\n\t输入第二个点的坐标:");
scanf("%f,%f",&d[1].x,&d[1].y);
printf("\n\t输入第三个点的坐标:");
scanf("%f,%f",&d[2].x,&d[2].y);
double r,x0,y0;
get_circle(d[0].x,d[0].y,d[1].x,d[1].y,d[2].x,d[2].y,&r,&x0,&y0);
printf("\n\t\t圆心为:(%f,%f),半径为%f",x0,y0,r);
}
第2个回答  2012-11-26
up

已知三点求圆的方程的c语言编程
已知三点求圆的 get_circle() 函数 x1, y1为第一个点的坐标,以此类推 r为求出的半径,x0, y0为圆心坐标 调用函数之前应先检查三点是否共线 否则会弹出被零除的错误 \/ include <math.h> void get_circle(double x1, double y1, double x2, double y2, double x3, double y3, double*...

请教己知三个平面坐标点,球圆心的方法!
计算步骤:(1)写出AB,BC的斜率 (2)写出AB,BC的中点坐标 (3)算出AB,BC的中垂线的方程,AB的中垂线过AB的中点且垂直于AB (4)根据AB,BC中垂线的方程,算出中垂线的交点坐标,交点坐标即是三角形 的外接圆的圆心坐标 (5)根据两点间距离公式可算得外接圆的半径 公式没有多大意义,按照...

求空间圆最小二乘拟合的C语言程序
白白白白| b1 b2 b3| 点乘积 公式简单,略。把 方向 系数 代入 空间圆的参数方程 求解便可。--- 还有个关系式 是 半径的 平方 等于 圆心到 圆上一点 空间距离。r * r = (x-Cx)^2 + (y-Cy)^2 + (z-Cz)^2

如何用C语言判断直线与圆的关系,并计算相交时两部分的面积?
{ printf("直线与圆相切\\n");} if(d<r){ double x,S_max,S_min;x=acos(d\/r)*180.0\/PI;\/\/反三角函数计算扇形的度数,用于下面求两部分的面积 S_max=(360-2*x)*PI*r*r\/360+d*sqrt(r*r-d*d);S_min=2*x*PI*r*r\/360-d*sqrt(r*r-d*d);printf("直线与圆相交\\n直线将...

int a=3,b=4,c=5;执行表达示,a++>&&c--&&++c后,a,b,c的值
例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c; 则执行结果就变成a = b = c = 5,不能达到预期的...

求C编程实例
根据圆的方程: R*R=X*X+Y*Y 可以算出圆上每一点行和列的对应关系。*程序说明与注释#include<stdio.h>#include<math.h>void main(){ double y; int x,m; for(y=10;y>=-10;y--) { m=2.5*sqrt(100-y*y); \/*计算行y对应的列坐标m,2.5是屏幕纵横比调节系数因为屏幕的...

已知三角形三个点怎么求外接圆方程
已知三角形ABC的三个顶点为A(1,6),B(-3,2),C(4,-4),求外接圆方程,外心和外接圆的半径。一楼根据你的答案我算出来是-X^2-y^2-8=0,那接下来是不是可以直接换为X^2+y^2=8,然后圆心为(0,0),半径为2根号2 既然是关于圆心接下来该怎么做maxlkl | 浏览2863 次 问题未开放回答 |举报 推荐于2017...

我编写的C程序怎么错了啊。在FLOAT那一行!
我编写的C程序怎么错了啊。在FLOAT那一行! #include<stdio.h>voidmain(){inta=3,b=4,c=5;longn=128765;unsignedintu=51274;floatx=1.2,y=2.4,z=-3.6;charc1='a',c2='b';printf("a=%db=%dc=%d\\n",a,b,c);printf("x=%f,y=%f,z=%f... #include <stdio.h>void main(){ int a=3,b...

如何用c语言求解2个圆的交点呢 圆的方程已知 请具体给个例子吧_百度知...
圆一 x^2 + y^2 + a1x + b1y +c1 = 0;圆二 x^2 + y^2 + a2x+ b2y + c2 = 0;a,b,c已知 ;先相减 (a1-a2) x + (b1-b2) y + (c1-c2) = 0;从而可以得到y = ex + f; e,f 已知;如果a1=a2,或者b1 =b2则可以直接求出x或者y值 代入圆一可以直接求x ...

c语言(或伪代码)怎样画椭圆(获得椭圆每点的坐标值)?
选取N个点,这N个点的横坐标的取值范围可以根据长轴端点和短轴端点坐标来确定,设N(x,y),根据N到两个焦点的距离之和是2a可列出关于x和y的方程,今儿求出y关于x的函数,由于椭圆是对称的所以这样的函数有两个,分别在x的范围之内找一定量的N的横坐标x,再把x代入上面的函数,就可求出y,把(x...

相似回答