本文是為了cad.net 數學基礎的防丟鏈接
轉載自 https://blog.csdn.net/jiangyb999/article/details/89366912
最近翻看我以前的博文,看到計算LWPLINE中凸度圓弧的圓心的公式那篇,一時竟想不起這公式是如何推導的了。(http://blog.sina.com.cn/s/blog_66349acf0102vivw.html)
這里把推導過程簡單描述一下,為了以后不再忘記。
注:本來想發在新浪博客上,奈何人家在維護,要5月才能恢復,已經寫好的文,怕丟失,就發到了這里。
首先要明確lwpline中圓弧的定義,在Autodesk的文檔中能見到兩種敘述:
1,凸度是圓弧圓心角的四分之一的正切
2,凸度等於圓弧的弓高和圓弧的前進距離的比,即凸度=2H/L,H為弓高,L為前進的長度,也即弦長。
這2種敘述表達的含義是一致的,只是第一種方便計算,第二種更直觀。
從圖上可知,此段圓弧的凸度 bulge=2H/L=tan(β)=tan(α/2)
這里α=2β,應該可以證明的。
(補充一下這個證明,見下圖,從圖上可看出,90 = α/2 + γ = β + γ,即 β = α/2)
可以想象,以AB的中點C為圓心,以紅線段的長度為半徑(記為r),以CB為起始位置逆時針旋轉90度就能得到O點。
記AB的傾角為θ,則
那么O點的坐標為:
我們知道 α=2β, 所以:
把C點坐標( (x1+x2)/2, (y1+y2)/2), r,以及sin(θ), cos(θ) 帶入公式(1),得到O點的坐標為:
化簡后得:
以上公式是以逆時針劣弧推導的結果,那么對於逆時針優弧以及順時針優劣弧是否也適用呢?
答案是:適用!不用做任何更改。
秘密就在於參數b具有自動調節功能。
下面簡單分析一下。
上面是逆時針優弧,此時的凸度bulge>1,那么b<0,所以 r<0
即:逆時針旋轉一個負的向量,相當於順時針旋轉其反向量(正向量)。
從圖上可以直觀的看到,實際是順時針旋轉到達的圓心位置。
這是一個順時針的劣弧,凸度bulge < 0, |bulge| < 1, 可以得到 b < 0, r < 0
與上面一樣的道理,也是順時針旋轉到達圓心位置。
這是一個順時針的優弧,bulge<0且 |bulge|>1, 那么 b>0, r>0
對於r>0的情況,仍然是逆時針旋轉。
====================================
所以,正是由於bulge可正可負,參數b才天生具有調節旋轉方向的功能。
因此,無需討論bulge是否正負,統統使用一組公式即可計算出圓心。
最后感慨一句:
Autodesk用凸度的正負表示圓弧的方向,真乃神來之筆。!