包含头文件:#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);