解析 c语言编写的根据三点得出圆心和半径的数学含义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析 c语言编写的根据三点得出圆心和半径的数学含义相关的知识,希望对你有一定的参考价值。

能否把每一行的数学中的几何意义说明一下,感谢各位前辈,(倒数第二行是求半径,已知数学意义)

参考技术A /***************
* 已知三点求圆的 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;


希望对你有帮助!
参考技术B 已验证楼上的程序有些小错误,导致无法输出或者结果错误,正确程序是
void get_circle(double x1, double y1, double x2, double y2, double x3, double y3)

double m1, n1, m2, n2, a1, b1, a2, b2,x0, y0, r;
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));
printf("\n\t%lf %lf %lf", x0, y0, r);
return;

python语言编程

(x,y)是以原点为圆心的圆上一点,编写一个程序,输出过(x,y)点且与圆相切的直线方程

参考技术A 设已知圆上一点坐标为(x1,y1) ,圆的半径为 r
若斜率不存在,则切线方程为: x = x1
若存在且斜率为K,则切线方程为:y - y1 = k(x-x1)
则圆心到切线的距离 d = r (半径),据此可求出斜率 k
将切线方程化为:y - y1 -kx + kx1 = 0,根据点到直线的距离的公式(此点为圆心即(0,0)),有:
d = | 0-y1 -0 +kx1| / ( k*k+1)^0.5 = r
而x1,y1,r是已知的,可求出k,至此切线方程呼之欲出

以上是关于解析 c语言编写的根据三点得出圆心和半径的数学含义的主要内容,如果未能解决你的问题,请参考以下文章

编写一个c程序,输入圆心坐标和半径,输出圆上所有的点。急!!!

已知三点如何求圆心坐标和半径

HDU 6206 Apple ( 高精度 && 计算几何 && 三点构圆求圆心半径 )

c语言给出半径圆心求圆上的点

给定两个点和半径找到圆心

空间三点圆心计算公式