坐标系统及其变换
齐次坐标
所谓齐次坐标表示法就是由\(n+1\)维向量表示一个\(n\)维向量。如\(n\)维向量\((P_1,P_2, … ,P_n)\)表示为\((hP_1,hP_2,...,hP_n,h)\),其中\(h\)称为哑坐标。
-
\(h\)可以取不同的值,所以同一点的齐次坐标不是唯一的。
- 如普通坐标系下的点\((2,3)\)变换为齐次坐标可以是\((1,1.5,0.5)\)、\((4,6,2)\)、\((6,9,3)\)等等。
-
普通坐标与齐次坐标的关系为“一对多”
- 由普通坐标\(×h\)→齐次坐标
- 由齐次坐标\(÷h\)→普通坐标
-
当\(h=1\)时产生的齐次坐标称为“规格化坐标”,因为前\(n\)个坐标就是普通坐标系下的\(n\)维坐标。
齐次坐标的作用
-
将各种变换用阶数统一的矩阵来表示。提供了用矩阵运算把二维、三维甚至高维空间上的一个点从一个坐标系变换到另一坐标系的有效方法。
-
便于表示无穷远点。
- 例如:\((x × h, y × h, h)\),令\(h\)等于\(0\)
-
齐次坐标变换矩阵形式把直线变换成直线段,平面变换成平面,多边形变换成多边形,多面体变换成多面体。
-
变换具有统一表示形式的优点
- 便于变换合成
- 便于硬件实现
窗口视图变换
用户域和窗口区
-
用户域:程序员用来定义草图的整个自然空间(WD)
- 人们所要描述的图形均在用户域中定义。
- 用户域是一个实数域,理论上是连续无限的。
-
窗口区:用户指定的任一区域(W)(用户域的子集)
- 窗口区W小于或等于用户域WD。
- 小于用户域的窗口区W叫做用户域的子域。
- 窗口可以有多种类型,矩形窗口、圆形窗口、多边形窗口等等。
- 窗口可以嵌套,即在第一层窗口中可再定义第二层窗口,在第I层窗口中可再定义第I+1层窗口等等。
屏幕域和视图区
-
屏幕域(DC):设备(打印机、绘图仪等)输出图形的最大区域,是有限的整数域。如图形显示器分辨率为1024×768→DC[0..1023]×[0..767]
-
视图区:任何小于或等于屏幕域的区域
- 视图区用设备坐标定义在屏幕域中
- 窗口区显示在视图区,需做窗口区到视图区的坐标转换。
- 视图区可以有多种类型:圆形、矩形、多边形等。
- 视图区也可以嵌套。
窗口区和视图区的坐标变换
设窗口的四条边界WXL、WXR、WYB、WYT
视图的四条边界VXL、VXR、VYB、VYT
则用户坐标系下的点(即窗口内的一点)\((X_w,Y_w\))对应屏幕视图区中的点\((X_s,Y_s)\),其变换公式为
公式解释:
简化为:
-
当\(a\neq c\)时,即\(x\)方向的变化与\(y\)方向的变化不同时,视图中的图形会有伸缩变化,图形变形。
-
当\(a=c=1\),\(b=d=0\)则\(X_s=X_w\)、\(Y_s=Y_w\),图形完全相同。
思考:前面讲的窗口→视图变换时,假设窗口的边和坐标轴平行,如果窗口的边不和坐标轴平行呢?
-
先让窗口FGHI转-α角,使它和FG'H'I'重合。
-
用(1)式进行计算。