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

2021-06-27 20:08:43 字數 1528 閱讀 4914

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

圓的引數方程(字母所代表含義可參見【第六回】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, θ]。

三維空間中剛體的旋轉

從零開始一起學習slam 三維空間剛體的旋轉 剛體 本身不會在運動過程中產生形變的物體,運動過程中同乙個向量的長度和夾角都不會發生變化。剛體變換也稱歐式變換。1 是重點!2 旋轉矩陣不是一般矩陣,它有比較強的約束條件。旋轉矩陣r具有正交性,r和r的轉置的乘積是單位陣,且行列式值為1。3 旋轉矩陣r的...

三維空間中的旋轉變換

1 繞座標軸旋轉的公式 1 繞z軸旋轉 2 繞x軸旋轉 3 繞y軸旋轉 以上的矩陣變換公式為 p p mat 2 繞任意軸旋轉的公式 給定具有單位長的 oa軸旋轉變換的矩陣表示可確定如下 3 繞任意軸旋轉在ogre中實現 ogre matrix3 i ogre matrix3 identity og...

三維空間中剛體的變換旋轉和平移

這裡旋轉主要可以採用旋轉向量,旋轉矩陣,尤拉角,四元數。我們也能反向從座標軸表現形式得到旋轉矩陣 尤拉角是採用偏航,俯仰,滾轉 yaw,pitch,roll來表示 這裡是先繞z,再繞y,最後繞x旋轉得到的 四元數 q cos a 2 nxsin a 2 nxsin a 2 nzsin a 2 兩個點...