刚学习了计算机图形学这门课程,为奠定根基的算法所倾倒,特此记录一二。
计算机图形学中的一个重要问题是在一个区域的内部填上不同的色彩或灰度。这里的区域分为两类,一类是多边形;另一类是以像素点集合表示的区域。 (注意,两类的区别是在图形学中的表达方式不一样)
在图形学中,多边形往往是由有序的顶点序列表达的,以便于进行放缩、平移、旋转等操作。然而,在填充灰度或色彩时,采用点阵的方式才容易操作。所以对于多边形而言,涉及一个扫描转换的问题:给定多边形,确定屏幕上归属于多边形的像素集合。
X 扫描线算法
概述
基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的所有象素。
下图所示 y=3 处的蓝色线为其中一条扫描线。在计算出 4 个交点后,算法会按照交点的 X 坐标顺序,对交点进行两两配对,然后填充。
算法步骤
- 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大 y 值( ymin 和 ymax )。
- 从 y = ymin 到 y = ymax ,每次用一条扫描线进行填充。
- 对一条扫描线填充的过程可分为四个步骤:
求交;排序;交点配对;区间填色。