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,通過凸度值繪製弧線-知乎文章

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章