一:坐标体系
对图形的描述,图形的输入输出都是在坐标系中进行。
WC世界坐标系:连续坐标系,实数域。
DC设备坐标系:离散坐标系,整数域。
NC规范化坐标系:[0,1]
WC->NC->DC
二:窗口与视区
window窗口:在WC中定义的区域
viewport视区:在DC中定义的区域
相似图形
三:剪取
1.点的剪取
2.直线的剪取
直线与窗口的关系:1.整个线段全在窗口内2.整个线段全在窗口外3.部分在窗口内部分在窗口内
凸多边形:最多只有一部分在窗口内
1.两个端点在窗内,整个线段在窗内2.
2.一个端点在窗内,另一个在窗外,部分在窗内
3.两个都在窗外,可能有两种情况,部分在窗口内,全部在窗口外
Cohen-Sutherland算法
原理:通过初始测试来减少要计算的交点数目从而加快线段剪取算法的速度
操作:每条线段的端点都赋以四位二进制代码(区域码 region code),用来标识端点相对于剪取矩形边界的位置。
赋值为1时,表示端点落在相应边界的外侧,否则该位为0。
第一种情况:两端点编码均为0000,线段都在窗内。
第二种情况:两端点编码相与不为0000,表示直线在窗口外
第三种情况:两端点编码不全为0000,但相与为0000,需进行交点判断(可通过中点求交法)
Cyrus-Beck算法
适用于任何凸多边形
采用法矢量的概念
Liang-Barsky裁剪算法
凹多边形:可能有多段在窗口内(自相交多边形不考虑)
叉积法:
如果各叉积全部为0,则各边共线;部分为正,部分为负则为凹多边形;全部为非负数则为凸多边形,沿着边的正向,内法矢量指向其左侧;全部为非正数,此时沿着边的正向,内法矢量指向其右侧。
旋转法:
3.多边形的剪取
Sutherland-Hodgman算法
通过对单一边或面的剪取来实现多边形的剪取
缺陷:不能处理凹多边形的情况。
Weiler-Atherton多边形剪取算法
注意:
4.文本的剪取
笔画剪取
字符剪取
字符串剪取
四:几何变换
五:直线的生成
DDA算法(Digital Differntial Analyzer Algorithm):
例:
+0.5的原因是为了减少误差(因为计算机不是四舍五入的)
对称DDA直线生成算法
只有移位操作,同一坐标可能连续停留两次,但不会连续停留三次。
Bresenham算法
六:圆的生产
双向对称:
八向对称
Bresenham算法
基本思想:寻找最接近于实际圆周上的点
七:多边形填充
1.多边形扫描线填充
特殊情况:
2.简单种子填充算法
缺点:栈堆可能变得很深,超出规定的范围,影响算法正常执行