旋轉

許多 CAD 應用程式都提供在工作區中旋轉物件的功能。 包含旋轉功能的應用程式會使用 SetWorldTransform 函式,將適當的世界空間設定為頁面空間轉換。 此函式會接收 XFORM 結構的指標,其中包含適當的值。 XFORM 的 eM11、eM12、eM21 和 eM22 成員分別指定旋轉角度的余弦值、正弦值、負正弦值和余弦值。

發生 旋轉 時,構成物件的點會隨著座標空間原點旋轉。 下圖顯示從全局座標空間複製到頁面座標空間時,20 x 20 單位矩形旋轉 30 度。

顯示兩個座標空間的圖例;每個都有位於不同位置且旋轉不同

在上圖中,矩形中的每個點都會旋轉 30 度,與座標空間原點有關。

下列演算法會針對與座標空間原點 A 旋轉的點 (x,y ) 計算新的 x 座標 (x ') 。

x' = (x * cos A) - (y * sin A) 

下列演算法會計算 y 座標 (y ') ,該點 (x,y ) 相對於原點的角度 A 旋轉。

y' = (x * sin A) + (y * cos A) 

這兩個旋轉轉換可以結合在 2-by-2 矩陣中,如下所示。

|x' y'| == |x y| * | cos A   sin A| 
                   |-sin A   cos A| 

產生旋轉的 2-by-2 矩陣包含下列值。

| .8660    .5000| 
|-.5000    .8660| 

旋轉演算法衍生

旋轉演算法是以三角的加法為基礎,指出兩個角度總和的三角函數 (A1 和 A2 ) 可以用兩個角度的三角函數來表示。

sin(A1 + A2) = (sin A1 * cos A2) + (cos A1 * sin A2) 
cos(A1 + A2) = (cos A1 * cos A2) - (sin A1 * sin A2) 

下圖顯示以逆時針方式旋轉到新位置 p' 的點。 此外,它會顯示由從座標空間原點繪製到每個點的線條所構成的兩個三角形,以及從每個點透過 X 軸繪製的線條。

顯示原點、p 和 p' 和兩個三角形的圖表

使用三角,可以藉由將假設 h 的長度乘以 A1 的余弦值,即可取得點 p 的 X 座標。

x = h * cos A1 

點 p 的 Y 座標可以乘以 A1 的正弦值乘以假設 h 的長度來取得。

y = h * sin A1 

同樣地,可以將點 p' 的 x 座標乘以 (A1 +A2 ) 的余弦值乘以假設 h 的長度。

x' = h * cos (A1 + A2) 

最後,可以將點 p' 的 Y 座標乘以 (A1 +A2 ) 的正弦值來取得。

y' = h * sin (A1 + A2) 

使用加法定理,上述演算法會變成下列專案:

x' = (h * cos A1 * cos A2) - (h * sin A1 * sin A2) 
y' = (h * cos A1 * sin A2) + (h * sin A1 * cos A2) 

依角度 A2 旋轉之指定點的旋轉演算法,可以藉由針對每個出現的 (h * cos A1 ) 取代 x,並以每個出現的 (h * sin A1 ) 取代 y。

x' = (x * cos A2) - (y * sin A2) 
y' = (x * sin A2) + (y * cos A2)