已知三点求圆的方程的c语言编程
3个回答
展开全部
/***************
* 已知三点求圆的 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;
}
希望对你有帮助!
* 已知三点求圆的 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;
}
希望对你有帮助!
东莞大凡
2024-11-19 广告
2024-11-19 广告
板格标定棋盘是我们东莞市大凡光学科技有限公司在精密光学测量领域的重要工具。它采用高精度设计,确保每一个格板都达到严格的校准标准。通过使用板格标定棋盘,我们能够有效地对光学测量系统进行校准,从而提升测量的准确性和可靠性。这一工具在光学仪器的研...
点击进入详情页
本回答由东莞大凡提供
展开全部
/*相关子函数由一楼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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
up
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询