计算机图形学【三】

一、二维图形变换


1、基本几何变换

基本几何变换:基本几何变换都是相对于坐标原点和坐标轴进行的几何变换。

(1)平移变换

(2)比例变换

当Sx=Sy时,称为整体比例变换

(3)旋转变换

【规定】:逆时针转动的角度为正,顺时针转动的角度为负。

顺时针旋转θ角度 = 逆时针旋转-θ(或2π-θ)角度

(4)对称变换

  • 关于x轴对称
  • 关于y轴对称
  • 关于原点对称
  • 关于y=x对称
  • 关于y=-x对称

(5)错切变换

错切变换:也称为剪切、错位变换,用于产生弹性物体的变形处理。

错切变换引起图形角度关系的改变,甚至导致图形发生变形。

  • 沿X轴方向的错切

  • 沿Y轴方向的错切

  • 同时沿x方向和y方向错切

2、复合变换

复合变换是指:图形作一次以上的几何变换,变换结果是每次的变换矩阵相乘。

任何一个复杂的几何变换都可以看作基本几何变换的组合形式。

(1)同种类变换的复合

  • 二维复合平移变换

  • 二维复合比例变换

  • 二维复合旋转变换

    • 1589806641734
    • 可见:旋转变换是错切变换和整体比例变换变换复合而来

(2)相对任一参考点的二维几何变换

(3)相对任意方向的二维几何变换

y=x等之前提到过的特殊类型可直接使用,但是要明白其本质是这么来的

一定注意角度,顺时针为负,逆时针为正

二、二维观察和裁剪


1、二维观察

(1)基本概念

  • 用户坐标系:纸上的图形采用的坐标是实数域中的直角坐标系或是极坐标系,统称为用户坐标系。

  • 设备坐标系:屏幕上采用的坐标系是整数域中直角坐标系,这类坐标系统称为设备坐标系。

  • 窗口:在计算机图形学中,将在用户坐标系中需要进行观察和处理的一个坐标区域称为窗(Window)。

  • 视区(也叫视口):为了在屏幕上指定显示图形的位置,在屏幕上定义一个矩形,该矩形称为视区,窗口内的图形就显示在屏幕上的视区中。即:将窗口映射到显示设备上的坐标区域称为视区(Viewport)。

(2)二维观察流程

  • WC: Windows Coordinates 用户坐标系

  • VC: Viewing Coordinates观察坐标系

  • DC: Device Coordinates 设备坐标系

  • NDC: Normalized Device Coordinates 规范化设备坐标系

  • 用户坐标系到观察坐标系的变换

  • 窗口到视区的变换

2、裁剪

在二维观察中,需要在观察坐标系下对窗口进行裁剪,即只保留窗口内的那部分图形,去掉窗口外的图形。

(1)点的裁剪

(2)直线段的裁剪—-Cohen-Sutherland算法

基本思想:

(1)若点P1和P2完全在裁剪窗口内,直线段完全可见,“简取”之

(2)若点P1和P2均落在窗口外,直线段完全不可见,“简弃”之,

(3)若直线段既不满足“简取”的条件,也不满足“简弃”的条件,则该直线段可能与窗口相交,此时,需要对直线段按交点进行分段,分段后重复上述处理。

观察图像可以发现:

  • 两个点的编码只要有一个位置都是相同的1就一定需要舍去
  • 两个点的编码都是0000就一定要保留

所以若code1|code2=0,对直线段应简取之,否则,若code1&code2≠0,对直线段可简弃之

(1)输入直线段的两端点坐标:P1(x1,y1)、P2(x2,y2),以及窗口的四条边界坐标:wyt、wyb、wxl和wxr;

(2)对P1、P2进行编码:点P1的编码为code1,点P2的编码为code2;

(3)若code1|code2=0,对直线段应简取之,转(6);否则,若code1&code2≠0,对直线段可简弃之,转(7);当上述两条均不满足时,进行步骤(4);

(4)确保P1在窗口外部:若P1在窗口内,则交换P1和P2的坐标值和编码;

(5)计算直线段与code1中编码等于1对应窗口边界的交点,并用该交点的坐标值替换P1的坐标值。也即在交点S处把线段一分为二,并去掉P1S这一段。考虑到P1是窗口外的一点,因此可以去掉P1S。转(2);

(6)用直线扫描转换算法画出当前的直线段P1P2;

(7)算法结束。

(3)直线段的裁剪—-中点分割算法

当对直线段不能简取也不能简弃时,简单地把线段等分为二段,对两段重复上述测试处理,直至每条线段完全在窗口内或完全在窗口外

(1)输入直线段的两端点坐标:P1(x1,y1)、P2(x2,y2),以及窗口的四条边界坐标:wyt、wyb、wxl和wxr;

(2)对P1、P2进行编码:点P1的编码为code1,点P2的编码为code2;

(3)若code1|code2=0,对直线段应简取之,保留当前直线段的端点坐标,转(8);否则,若code1&code2≠0,对直线段可简弃之,转(9);当上述两条均不满足时,进行步骤(4);

(4) 若code1=0且P1为窗口边界上的点,判断P1和P2是否在窗口边界的同一外侧。若在同一侧,则简弃之,绘制P1,转(9),否则转(6);

(5) 若code2=0且P2为窗口边界上的点,判断P1和P2是否在窗口边界的同一外侧。若在同一侧,则简弃之,绘制P2,转(9),否则转(6);

(6) 求出直线段的中点M,将P1M、P2M入栈;

(7)当栈不空时,从栈中弹出一条直线段,记为P1P2,转(2)进行处理。否则,继续(6);

(8)当栈为空时,合并保留的直线段端点,得到窗口内的直线段P1P2。用直线扫描转换算法画出当前的直线段P1P2;

(9) 算法结束。

(4)直线段的裁剪—-Liang-Barsky算法

前提:直线的参数方程

(5)多边形的裁剪Sutherland-Hodgeman多边形裁剪算法(S-H多边形裁剪算法)

基本思想:将多边形边界作为一个整体,每次用窗口的一条边对要裁剪的多边形进行裁剪。最终,多边形被裁剪后得到的边与窗口部分边界组成裁剪后的多边形。

(6)多边形的裁剪Weiler-Atherton 多边形裁剪算法

二、三维图形变换


右手螺旋定则判断方向。

1、旋转变换

2、对称变换

(1)平面对称

(2)轴对称

3、错切变换

哪个轴数字不为0,哪个轴+方向轴上就会出现角度

4、逆变换

5、复合变换

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~