計算機圖形學(四)_幾何變換_1_基本的二維幾何變換(二)_旋轉
二維旋轉
通過指定一個旋轉軸(rotation axis)和一個旋轉角度(rotation angle),可以進行一次旋轉(rotation)變換。在將物件的所有頂點按指定角度繞指定旋轉軸旋轉後,該物件的所有點都旋轉到新位置。
一個物件的二維旋轉通過在xy平面上沿圓路徑將物件重定位來實現。此時,我們將物件繞與xy平面垂直的旋轉軸(與z軸平行)旋轉。三維旋轉的引數有旋轉角θ和稱為旋轉點(rotation point或pivot point )的位置(xr , yr),物件繞該點旋轉(如下圖)。基準點是旋轉軸與xy平面的交點。正角度θ定義繞基準點的逆時針旋轉(如下圖),而負角度將物件沿順時針方向旋轉。
為了簡化該基本方法的敘述,我們首先確定當基準點為座標原點時點位置P進行旋轉的變換方程。原始點和變換後點位置的角度和座標關係如圖所示。其中,r是點到原點的固定距離,角Φ是點的原始角度位置與水平線的夾角,θ是旋轉角。應用標準的三角等式,我們可以利用角度θ和Φ將轉換後的座標表示為方程1:
在極座標系中,點的原始座標為方程2:
將方程2代人方程1中,我們就得到相對於原點,將位置(x, y)的點旋轉θ角的變換方程3:
因為列向量表示式表示座標位置為:
那麼旋轉方程的矩陣形式為方程4:
其中,旋轉矩陣為
列向量表示式中座標位置P的列向量是標準的數學表示。然而,早期的圖形系統有時用行向量表示座標位置,這會改變執行旋轉時矩陣相乘的次序。但現在,OpenGL, Java, PHIGS和GKS都按標準列向量方式表示。
方程2中給出了繞任意基準點旋轉一個點的例子。利用圖中的三角關係,可以將方程3規範化為繞任意指定的旋轉位置(xr , yr))旋轉的點的變換方程5:
這個通用旋轉方程不同於方程3,該方程包含了一個加項以及在座標值上的多重係數。因此,通過其中的元素包含方程5中的加項(平移項)的列向量矩陣加法,就可以修改矩陣方程4,使其包括基準點座標。然而,還有更好的方法可以形成這樣的矩陣公式,在4.2節
我們將討論表達變換公式的更一致的方法。
類似於平移,旋轉是一種不變形地移動物件的剛體變換,物件上的所有點旋轉相同的角度。線段的旋轉可以通過將旋轉方程5用於每個線段端點,並重新繪製新端點間的線段而得到。多邊形的旋轉則是將每個頂點旋轉指定的旋轉角,並使用新的頂點來生成多邊形而實現旋轉。曲線的旋轉通過定位定義的點並重新繪製曲線而完成。例如圓或橢圓,可以通過將中心位置沿指定旋轉角對著的弧移動而繞非中心軸旋轉。橢圓可通過旋轉其長軸和短軸來實現繞其中心位置的旋轉。
通過指定一個旋轉軸(rotation axis)和一個旋轉角度(rotation angle),可以進行一次旋轉(rotation)變換。在將物件的所有頂點按指定角度繞指定旋轉軸旋轉後,該物件的所有點都旋轉到新位置。
一個物件的二維旋轉通過在xy平面上沿圓路徑將物件重定位來實現。此時,我們將物件繞與xy平面垂直的旋轉軸(與z軸平行)旋轉。三維旋轉的引數有旋轉角θ和稱為旋轉點(rotation point或pivot point )的位置(xr , yr),物件繞該點旋轉(如下圖)。基準點是旋轉軸與xy平面的交點。正角度θ定義繞基準點的逆時針旋轉(如下圖),而負角度將物件沿順時針方向旋轉。
為了簡化該基本方法的敘述,我們首先確定當基準點為座標原點時點位置P進行旋轉的變換方程。原始點和變換後點位置的角度和座標關係如圖所示。其中,r是點到原點的固定距離,角Φ是點的原始角度位置與水平線的夾角,θ是旋轉角。應用標準的三角等式,我們可以利用角度θ和Φ將轉換後的座標表示為方程1:
在極座標系中,點的原始座標為方程2:
將方程2代人方程1中,我們就得到相對於原點,將位置(x, y)的點旋轉θ角的變換方程3:
因為列向量表示式表示座標位置為:
那麼旋轉方程的矩陣形式為方程4:
其中,旋轉矩陣為
列向量表示式中座標位置P的列向量是標準的數學表示。然而,早期的圖形系統有時用行向量表示座標位置,這會改變執行旋轉時矩陣相乘的次序。但現在,OpenGL, Java, PHIGS和GKS都按標準列向量方式表示。
方程2中給出了繞任意基準點旋轉一個點的例子。利用圖中的三角關係,可以將方程3規範化為繞任意指定的旋轉位置(xr , yr))旋轉的點的變換方程5:
這個通用旋轉方程不同於方程3,該方程包含了一個加項以及在座標值上的多重係數。因此,通過其中的元素包含方程5中的加項(平移項)的列向量矩陣加法,就可以修改矩陣方程4,使其包括基準點座標。然而,還有更好的方法可以形成這樣的矩陣公式,在4.2節
我們將討論表達變換公式的更一致的方法。
類似於平移,旋轉是一種不變形地移動物件的剛體變換,物件上的所有點旋轉相同的角度。線段的旋轉可以通過將旋轉方程5用於每個線段端點,並重新繪製新端點間的線段而得到。多邊形的旋轉則是將每個頂點旋轉指定的旋轉角,並使用新的頂點來生成多邊形而實現旋轉。曲線的旋轉通過定位定義的點並重新繪製曲線而完成。例如圓或橢圓,可以通過將中心位置沿指定旋轉角對著的弧移動而繞非中心軸旋轉。橢圓可通過旋轉其長軸和短軸來實現繞其中心位置的旋轉。
在下列程式示例中,一個多邊形繞指定的世界座標系中的基準點旋轉。旋轉過程的輸入引數是原始的多邊形頂點、基準點座標和用弧度表示的旋轉角θ,多邊形用OpenGL子程式重新生成。
class wcPt2D {
public:
GLfloat x, y;
};
void rotatePolyon (wcPt2D * verts, GLint nVerts, wcPt2D pivPt, GLdouble theta)
{
wcPt2D * vertsRot;
GLint k;
for (k = 0; k < nVerts; k++){
vertsRot [k].x = pivPt.x + (verts [k].x - pivPt.x) * cos(theta) - (verts [k].y - pivPt.y) * sin(theta);
vertsRot [k].y = pivPt.y + (verts [k].x - pivPt.x) * sin(theta) + (verts [k].y - pivPt.y) * cos(theta);
}
glBegin {GL_POLYGON};
for(k = 0; k < nVerts; k++)
glVertex2f (vertsRot [k].x, vertsRot [k].y);
glEnd();
}
相關文章
- 計算機視覺—圖片幾何變換(2)計算機視覺
- OpenCV計算機視覺學習(11)——影像空間幾何變換(影像縮放,影像旋轉,影像翻轉,影像平移,仿射變換,映象變換)OpenCV計算機視覺
- opencv 圖片幾何變換-縮放OpenCV
- 計算幾何 —— 二維幾何基礎 —— 距離度量方法
- 計算機圖形學 第四章 圖形變換計算機
- 【第一道計算幾何題】 UVA11178 Morley‘s Theorem (二維幾何,旋轉直線求求交點)REM
- 計算機圖形學之矩陣變換計算機矩陣
- 計算機圖形:三維觀察之投影變換計算機
- Python 影像處理 OpenCV (5):影像的幾何變換PythonOpenCV
- 【IDL】幾何圖形數學運算函式函式
- CGAffineTransform二維檢視旋轉、縮放、平移變換詳解ORM
- 圖形學學習筆記二:觀測變換筆記
- HyperWorks基於幾何投影的網格變形
- 計算幾何
- POJ 1113 Wall(思維 計算幾何 數學)
- 數學趣題:平面幾何(二)
- 計算幾何:模板
- 計算幾何模板
- 【學習筆記】計算幾何筆記
- CodeForces 887 E. Little Brother(計算幾何+二分)
- Something about 計算幾何
- [筆記] 計算幾何筆記
- 【線性代數】何時用初等行變換,何時用初等列變換?
- three.js 幾何體(二)JS
- 關於計算機圖形學的一些介紹(一)基本要素與空間變換計算機
- 圖形學常⻅的變換推導
- Metal入門教程(二)三維變換
- 不可不知的WPF幾何圖形(Geometry)
- CSS繪製各種幾何圖形形狀效果CSS
- 三維空間座標系變換-旋轉矩陣矩陣
- SGU 124 Broken line(計算幾何)
- 計算幾何——平面最近點對
- POJ - 1556 【計算幾何 + 最短路】
- [幾何]計算不規則多邊形的面積、中心、重心
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- [計算幾何]圓與三角形是否相交
- HNOI2016礦區(計算幾何+對偶圖)
- 腦圖學習 JavaScript 之犀牛書【三 · 二】型別轉換、變數JavaScript型別變數
- 幾何圖形在logo設計中的有哪些情感意義?Go