三維空間中的圓與二維多段線

        已知一段圓弧的起點、終點、弧度和法向,求此段圓弧的參數方程和參數區間。

        圓的參數方程(字母所代表含義可參見【第六回】OCCT之Package Geom的曲線曲面參數方程解析):

P(U) = O + R*Cos(U)*XDir + R*Sin(U)*YDir
        這個問題主要應用於二維多段線中圓弧段的求解。在這裏我先講一下二維多段線的構造。

二維多段線

        二維多段線由直線段和圓弧段構成,二維的意思是多段線是固定在某一個平面上的,這個平面可由用戶任意指定。在ObjectARX中把這個平面稱作OCS(object coordinate system, 對象座標系),兩個參數可以確定這個OCS:平面的法向normal,WCS(world coordinate system, 世界座標系)的原點到OCS的原點的距離,求法可參見object coordinate systems根據座標系統構造轉換矩陣(不包含縮放)
        下面來仔細說一下ObjectARX中二維多段線的參數。
        二維多段線的參數有:P1(第1點座標),...,Pn(第n點座標);Bulge_1,...,Bulge_n。其中Bulge_n是指第n點是圓弧的起點時,Bulge_n=tan(α/4),其中α是圓弧的夾角(從起點到終點,右手座標系),如果第n點是直線的起點時,Bulge_n=0。
        爲什麼Bulge_n=tan(α/4)?因爲三角函數tan(α)的一個週期是[-π/2, π/2],而因爲圓弧的 角度區間爲[-2π, 2π],取Bulge_n=tan(α/4),是將圓弧的角度壓縮到[-π/2, π/2],這樣可以逆向求得α。

問題求解

        如下圖所示問題的俯視圖和側視圖:



如上圖所示,點sp和ep分別爲圓弧的起點和終點,點mp爲線段spep的中點,法向normal朝向屏幕外,x'軸向爲epsp方向,y‘軸向爲以點mp爲起點,normal×x'方向。當弧度θ爲ω>π時,圓弧爲arc2,點cp2爲此圓弧的圓心;當弧度θ爲0<ψ<π時,圓弧爲arc1,點cp1爲此圓弧的圓心。(ps: 圓弧的走勢始終是以sp爲起點,逆時針繞至終點ep。基於此,若給定的弧度θ<0,則取絕對值|θ|,並將normal反向。)
        下面列出求解過程的僞代碼(假設給定的弧度θ>0)。
mp = (sp+ep)/2;
y’ = normalize(normal×spep);
cp = mp + y’|spmp|cotθ/2;
radius = |spmp|/sinθ/2;
xAxis = normalize(cpsp);
yAxis = normalize(normal×xAxis)。
區間爲[0, θ]。

發佈了47 篇原創文章 · 獲贊 22 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章