欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

三点法创建圆

发布时间:2025/3/18 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 三点法创建圆 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2019独角兽企业重金招聘Python工程师标准>>>

包含头文件:#include <math.h>

求幂函数:long lpow = pow(x,y);//其作用是计算x的y次方。x、y及函数值都是double型

绝对值: double dfabs = fabs(x ); //求 double 型x的绝对值 , 计算|x|, 当x不为负时返回 x,否则返回 -x

开平方: float sqrt (float),double sqrt (double),double long sqrt(double long) // 一个非负实数的平方根, 注意没有sqrt (int),但是返回值可以为int

算法原理为:

假设圆心坐标为(x,y,z) ,已知的三点坐标分别为(x 1 ,y 1 ,z 1 ) 、 (x 2 ,y 2 ,z 2 )和(x 3 ,y 3 ,z 3 ) ,可以直接建立的方程是:

计算出圆心位置之后,就可以使用计算两点距离的函数,计算出圆形的半径。

// 使用数学方法 double xysm, xyse, xy; AcGePoint3d ptCenter; double radius; xy = pow(pt1[X], 2) + pow(pt1[Y], 2); xyse = xy - pow(pt3[X], 2) - pow(pt3[Y], 2); xysm = xy - pow(pt2[X], 2) - pow(pt2[Y], 2); xy = (pt1[X] - pt2[X]) * (pt1[Y] - pt3[Y]) - (pt1[X] - pt3[X]) * (pt1[Y] - pt2[Y]); // 判断参数有效性 if (fabs(xy) < 0.000001) { AfxMessageBox("所输入的参数无法创建圆形!"); return 0; } // 获得圆心和半径 ptCenter[X] = (xysm * (pt1[Y] - pt3[Y]) - xyse * (pt1[Y] - pt2[Y])) / (2 * xy); ptCenter[Y] = (xyse * (pt1[X] - pt2[X]) - xysm * (pt1[X] - pt3[X])) / (2 * xy); ptCenter[Z] = 0; radius = sqrt((pt1[X] - ptCenter[X]) * (pt1[X] - ptCenter[X]) + (pt1[Y] - ptCenter[Y]) * (pt1[Y] - ptCenter[Y])); if (radius < 0.000001) { AfxMessageBox("半径过小!"); return 0; }

// 使用几何类

AcGeCircArc2d geArc(pt1, pt2, pt3); AcGePoint3d ptCenter(geArc.center().x, geArc.center().y, 0);

 

转载于:https://my.oschina.net/u/2930533/blog/1578117

总结

以上是生活随笔为你收集整理的三点法创建圆的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。