AutoCAD 中凸度(bulge)的概念

一,什么是 AutoCAD 中的凸度

凸度(bulge)是AutoCAD 中一个非常重要和强大的数学工具,它可以以非常简洁的方式表示一段弧的信息。已知平面内具体两点坐标,以及一个凸度值,即可唯一确定一段弧。

多段线中,凸度的数值放置在线段的两个端点中的前一个端点上。

二,凸度的具体定义

bulge 的具体值定义为这段弧所对应的弧度(角度)的1/4的正切值,即

bulge = tan(θ/4)  , 其中 θ 是弧本身在其所在圆中所对应的弧度(角度)

bulge 值可以为正,也可以为负。约定bulge 为正时表示这段弧是逆时针弧bulge 为负时表示这段弧为顺时针弧

根据定义,不难看出,已知起点 A,终点 B,以及其间的凸度值,可以唯一确定一段弧线。

并且,可以推出,bulge 有以下特性:

bulge 的值为 0,线段 AB 为一段直线

bulge 的绝对值小于 1 时,弧线段 AB 为劣弧bulge 的绝对值大于 1 时,弧线段 AB 为优弧

 

三,根据凸度值计算弧线的顺逆、优劣、圆心、半径

根据弧的角度和顺逆,即可计算凸度值。

反过来,可根据凸度值,得到弧线的弧度(角度),进而结合弧线段起点、终点坐标,计算出弧线的圆心和半径。

 

 

 根据三角函数,可得求 弧半径 的公式为:

R = (|AB|/2) / sin(θ/2)

根据凸度定义,可直接得知弧的顺逆,根据凸度是否大于 1 可得知弧线是优劣

最后,已知弧线段起点、终点坐标,顺逆,以及弧半径,计算弧的圆心坐标

已知起点S、终点E 和半径 R,可以先确定两个可能的圆心 C1(CX1, CY1), C2(CX2, CY2):

   思路:
            ∵ 圆心一定落在弦的垂直平分线上 (连接圆上任意两点的线段叫做弦)
            ∴ C1C2 垂直于 SE
            ∵ 由余弦公式可求出 ∠a = ∠b = acos(|SD|/R) = acos(|SE|/2/R)
               由向量的角度定义,可求出向量 ↑SE 的角度(这里命该角度为 ∠c)
            ∴ 可求出向量 ↑SC1 的角度 ∠m =  ∠c + ∠a
                          向量 ↑SC2 的角度 ∠n  =  ∠c  - ∠a
            ∴ 可求出
                  CX1 = S.x + cos(∠m) * R
                  CY1 = S.y + sin(∠m) * R
                  CX2 = S.x + cos(∠n) * R
                  CY2 = S.y + sin(∠n) * R

具体计算:

    令 length = |SE|,起点坐标为 (startX, startY),  终点坐标为 (endX, endY)

    则 a = acos(min(1.0, length/ 2.0 / R));                     //防止浮点误差导致出现 1.00000000xx 而计算失败
         c = atan2(endY - startY, endX - startX);

    进一步,可得两圆心坐标 (CX1, CY1), (CX2, CY2)
    CX1 = startX + cos(c + a) * R;
    CY1 = startY + sin(c + a) * R;
    CX2 = startX + cos(c - a) * R;
    CY2 = startY + sin(c - a) * R;

其中,(CX1, CY1) 位于 SE 向量方向的左侧,(CX2, CY2) 位于 SE 向量方向的右侧

最后,只需要根据弧的顺逆优劣,即可确定圆心坐标。

如果是 “顺优|逆劣” 则圆心为 (CX1, CY1),“顺劣|逆优” 则圆心为 (CX2, CY2)。

 

计算 圆心, 半径 总结

已知起点 (startX, startY), 终点(endX, endY) 和凸度 bulge, 求圆心 (CX,CY)

1. θ = atan(|bulge|)*4

2. AB = √((startX-endX)²+(startY-endY)²))

3. R = (AB/2) / sin(θ/2)

4.  a = acos(min(1.0, AB / 2 / R));                       //具体编程实现上,防止浮点误差导致出现 1.00000000xx 而计算失败

     c = atan2(endY - startY, endX - startX);

5. CX1 = startX + cos(c + a) * R;
    CY1 = startY + sin(c + a) * R;
    CX2 = startX + cos(c - a) * R;
    CY2 = startY + sin(c - a) * R;

6.  bulge < -1 或 0 < bulge < 1 时,CX=CX1;  CY=CY1

     bulge > 1  或 0 > bulge > -1 时,CX=CX2; CY=CY2

 

 四、其他计算圆心的方式

已知圆弧的起点端点和凸度计算圆心-CSDN

 五,其他参考文章

【GIS前端】解析CAD,通过凸度值绘制弧线-知乎文章

 本文地址: https://www.cnblogs.com/BensonLaur/p/16189673.html

posted @ 2022-04-25 12:14  BensonLaur  阅读(7210)  评论(0编辑  收藏  举报