图形变换.docx
《图形变换.docx》由会员分享,可在线阅读,更多相关《图形变换.docx(11页珍藏版)》请在冰豆网上搜索。
图形变换
第一节 用户坐标到屏幕坐标变换
1.窗口到视口的变换
2.实型值到整型值的变换
3.y坐标值方向变换
4.长宽比例变换
第二节二维几何变换
一、基本变换
1、比例变换
2.对称变换
3.错切变换
4.旋转变换
5.平移变换
二、复合变换
1.复合平移
2.复合比例
3.复合旋转
4.相对点(xo,yo)的比例变换
5.相对点(xo,yo)的旋转变换
从这一部分开始,进入了图形编程的比较烦琐的部分,要真正对图形编程有所了解,这一部分的内容是必须要掌握的。
在计算机绘图过程中,经常需要进行绘图变换,主要包括二维图形变换和三维图形变换。
这一部分讨论二维图形变换,其内容有用户坐标到屏幕坐标的变换、图形的比例变换、对称变换、错切变换、旋转变换、平移变换和复合变换等。
后面讲到了二维剪裁,即线段裁剪与多边形裁剪。
第一节 用户坐标到屏幕坐标变换
假设纸上有一个图形,要用计算机把它在屏幕上画出来。
那么首先遇到的问题是,纸上的图形采用的坐标是实数域域中的直角坐标系或是极坐标系,统称为用户坐标系。
而屏幕上采用的坐标系是整数域中直角坐标系,这类坐标系统称为设备坐标系。
因此用户坐标系中图形需要经过变换才能绘制在屏幕上,显然这个变换的内容包括:
1)将用户坐标系中任意范围区域转换到屏幕某个范围区域,从而用户坐标系此范围区域内的图形也转换到屏幕上该范围区域内。
2)用户坐标系此区域内图形上的坐标值转换到屏幕上该范围区域内后不一定是整数,取整后才成为该范围区域内的屏幕坐标值。
3)用户坐标右手系到屏幕坐标左手系的坐标轴方向变换。
4)当屏幕坐标系水平方向与垂直方向刻度不等(即像素间距不等)时,为保持图形不走样,还要进行比例变换。
下面介绍这些内容的具体计算问题。
1.窗口到视口的变换
更确切地说,是实际图形到屏幕图形的转换。
有时也称为数据规格化。
在用户坐标系中,指定一矩形域以确定要显示(或绘制)的图形部分,这个矩形区域称为窗口。
在屏幕上可任选一矩形域以显示(或绘制)窗口内的图形,该域称为视口。
如图2-1所示。
一般视窗口的四条边界分别为:
左边界x=x1、右边界x=x2.下边界y=y1,上边界y=y2。
视口的四条边界分别为:
左边界sx=sx1,右边界sx=sx2,上边界sy=sy1,下边界sy=sy2。
经变换后应有,窗口的上边界线段(或下边界线段)长x2-x1变换成视口上边界线段(或下边界线段)长sx2-sx1。
设其比例变换因子为k1,则可得
k1*(x2-x1)=sx2-sx1
k1=(sx2-sx1)/(x2-x1)
对窗口内任一x坐标(x1<=x<=x2)变换后为视口内水平方向sx坐标(sx1<=sx<=sx2)。
由上述有:
k1*(x-x1)=sx-sx1
sx=sx1+k1*(x-x1)
=sx1+(x-x1)*(sx2-sx1)/(x2-x1)
同样,经变换后窗口的左边界线段(或右边界线段)长y2-y1变换成视口左边界线段(或右边界线段)长sy2-sy1。
设其比例变换因子为k2,则可得
k2*(y2-y1)=sy2-sy1
k2=(sy2-sy1)/(y2-y1)
对窗口内任一y坐标(y1<=y<=y2)变换后为视口内垂直sy坐标(sy1<=sy<=sy2),应有
k2*(y-y1)=sy-sy1
sy=sy1+k2*(y-y1)
=sy1+(y-y1)*(sy2-sy1)/(y2-y1)
于是对窗口内图形上任一点坐标(x,y)变换到屏幕上视口内成为(sx,sy),则
sx=sx1+(x-x1)*(sx2-sx1)/(x2-x1)
sy=sy1+(y-y1)*(sy2-sy1)/(y2-y1)
写成简式
sx=k1*x+a
sy=k2*y+b
这里
a=sx1-k1*x1
b-sy1-k2*y1
k1=(sx2-sx1)/(x2-x1)
k2=(sy2-sy1)/(y2-y1)
2.实型值到整型值的变换
上面对窗口内图形上任一点坐标(x,y)变换到屏幕上视口内成为(sx,sy),
sx=k1*x+a
sy=k2*y+b k1,k2,a,b同上
这样计算出来的sx,sy一般是实型值,而屏幕上视口内屏幕坐标是整型值,因此要将sx,sy实型值转换成屏幕坐标系的整型值。
这可以通过四舍五入的方法将实型值的绝对值圆整化。
由于C语言中已经替我们想到了这点,它提供的函数可以自动取整,因此用户在调用标准函数在屏幕上绘图时一般不需要考虑这个问题。
当然也可以用赋值的类型转换规则来实现实型值到整型值的变换。
3.y坐标值方向变换
一般屏幕坐标系是直角左手系,y轴方向向下为正,原点在屏幕的左上角,如图2-2所示。
窗口内图形上任一点(x,y)变换到视口内成为(sx,xy),而(x,y)是相对用户坐标系(直角右手系)的。
(sx,sy)是相对屏幕坐标系(直角左手系)的,因此y轴方向相反。
为使窗口内图形变换到视口上图形其形状一致,需将视口上图形y轴方向变换成窗口内图形y轴方向。
这只要将求得的视口内各点的sy整型坐标均用sy2去减,即sy2-sy(整型)代替sy(整型)即可,经这样的坐标轴方向变换后得到的视口内图形与窗口内图形一致。
4.长宽比例变换
屏幕坐标系x方向与y方向上的刻度可能不一样,这取决于水平方向像素间距与垂直方向偈素间距大小是否一致。
如果两个方向的刻度不相等,那么用户坐标系下一个正方形将显示(或绘制)成为一个长方形有,一个圆将成为一个椭圆。
为保持原图形的长宽比。
使图形显示(或绘制)后不走样,需求出屏幕上两侍标轴刻度的比值(即纵横比)。
可以用函数getaspectratio()(见前文所述)返回x方向和y方向的比例数,从而求得这个比值。
再瘵原图形y方向坐标乘以该比值,这样显示(或绘制)出来的图形应不走样。
若不考虑图形的走样,就不必作这个变换。
第二节二维几何变换
图形的几何变换一般是指对图形的几何信息经过变换后产生新的图形,图形几何变换既可以看作是坐标系不动而图形变动,变动后的图形在坐标系中的坐标值发生变化;出可以看作图形不动而坐标系变动,变动后的图形在新坐标系下具有新的坐标值。
这两种情况本质上都是一样的,都是图形由新的坐标值表示,因此是新产生的图形。
图形几何变换包括比例变换、对称变换、错切变换、旋转变换、平移变换及其复合变换。
图形上所有的点在几何变换前后的坐标关系一般用解析几何方法可以求得,但这些几何关系用矩阵方法表示,运算更为方便。
一、基本变换
图形基本几何变换是指比例变换、对称变换、错切变换、旋转变换和平移变换等。
除平移变换外,这里其它四种几何变换都可以用组成图形的点向量(或称1×2阶矩阵)和2×2阶变换矩阵相乘表示,而平移变换需引入新方法来实现。
1、比例变换
设图形上一点P(x,y),经比例变换后成为新的菜上一点P'(x',y'),即有
x'=a*x
y'=d*y
式中a,d为比例因子
将此比例变换式写成矩阵式得
a 0
[x'y']=[xy] =[xy]*T
0 d
a 0
这里T= 叫做比例变换矩阵。
若a=d,则x,y坐标按同一比例变换。
当a=d>1时,图形放大;当0 0 d
图形缩小。
若a≠d,则x,y坐标按各自不同比例变换。
3 0
例1:
设有比例变换矩阵T= ,三角形abc经过比例变换成为三角形a'b'c'。
如图2-3所示。
0 1
3 0
a[12] =[32] a'
0 1
3 0
b[22] =[62] b'
0 1
3 0
c[23] =[63] c'
0 1
2.对称变换
图形上一点P(x,y)经关于原点对称变换后成为新图形上一点P'(x',y'),则
x'=-x
y'=-y
写成矩阵形式成为
-1 0
[x'y']=[xy] =[xy]*T
0 -1
-1 0
这里T= 为关于原点对称变换矩阵。
0 -1
若关于x轴对称,则对称变换的矩阵表示为
1 0
[x'y']=[xy] =[xy]*T
0 -1
1 0
于是关于x轴对称变换矩阵T=
0 -1
若关于y轴对称,则对称变换的矩阵表示为
-1 0
[x'y']=[xy] =[xy]*T
0 1
-1 0
于是关于y轴对称变换矩阵T=
0 1
若关于直线y=-x对称,则对称变换矩阵表示为
0 -1
[x'y']=[xy] =[xy]*T
-1 0
0 1
于是关于直线y=x对称变换矩阵T=
1 0
各种对称变换的图形均可由实例程序绘出,参见实例程序图形。
3.错切变换
对图形的任一点P(x,y),作线性变换如下
x'=x+by
y'=y +dx
式中b,d为不全为零的常