【计算机图形学】2-4 多边形的绘制与填充
当我们用顶点记录多边形时,对于直线的绘制和前面的图形无异,但当填充颜色的时候,我们并不能直接获得要填充的区域的起点和终点,这时通常采用扫描线算法。
多边形区域填充的时候,每一行与多边形边的交点很容易获得,问题在于当在一行获得多个交点时,如果判断相邻点对是在多边形内还是多边形外。对于每一行,我们在多边形外引一条水平的射线,这条射线必然与多边形有偶数个交点,因为多边形的大小是有限的,射线进入多边形内部后必然还要再出多边形,进和出的次数一定相等,这样,对所有交点排序后,每两个相邻的点对都对应多边形内部要填充的一段区域。
接下来要考虑的是边界条件。我们引出的是水平的射线,当多边形的一条边水平时,我们要考虑它两侧不水平的边的位置。如果两侧的不水平边分居水平边的两侧,则射线有进或出的过程,随便记录水平边的一个端点即可;如果两侧的不水平边在水平边的同侧,则射线不会进出多边形,无需记录端点。
当射线的交点是多边形的顶点时,同样考虑顶点两侧的边是否在同一侧,如果不在同一侧则记录,在同一侧则不记录。由于顶点和水平线可能重复,要注意考虑判断条件,不能重复记录。
基本代码:
draw_polygon.h