三点法创建圆
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
包含頭文件:#include <math.h>
求冪函數(shù):long lpow = pow(x,y);//其作用是計算x的y次方。x、y及函數(shù)值都是double型
絕對值: double dfabs = fabs(x ); //求 double 型x的絕對值 , 計算|x|, 當(dāng)x不為負(fù)時返回 x,否則返回 -x
開平方: float sqrt (float),double sqrt (double),double long sqrt(double long) // 一個非負(fù)實數(shù)的平方根, 注意沒有sqrt (int),但是返回值可以為int
算法原理為:
假設(shè)圓心坐標(biāo)為(x,y,z) ,已知的三點坐標(biāo)分別為(x 1 ,y 1 ,z 1 ) 、 (x 2 ,y 2 ,z 2 )和(x 3 ,y 3 ,z 3 ) ,可以直接建立的方程是:
計算出圓心位置之后,就可以使用計算兩點距離的函數(shù),計算出圓形的半徑。
// 使用數(shù)學(xué)方法 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]); // 判斷參數(shù)有效性 if (fabs(xy) < 0.000001) { AfxMessageBox("所輸入的參數(shù)無法創(chuàng)建圓形!"); 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);?
轉(zhuǎn)載于:https://my.oschina.net/u/2930533/blog/1578117
總結(jié)
- 上一篇: Linux 定期删除3天以前的日志文件
- 下一篇: 关于PMP