1已知多边形各顶点坐标61856726和23写出有序边表填充算法中的 ET 及全部 AET 的内容。
首先需要根据给定的多边形顶点坐标,确定每条边的起点和终点,并计算出每条边的斜率和 y 坐标跨越值。
边的起点和终点如下:
(6,1) - (8,5)
(8,5) - (6,7)
(6,7) - (2,6)
(2,6) - (2,3)
(2,3) - (6,1)
各边的斜率和 y 坐标跨越值如下:
(6,1) - (8,5):斜率 k = 2,y 跨越值 dy = 4
(8,5) - (6,7):斜率 k = -1,y 跨越值 dy = 2
(6,7) - (2,6):斜率 k = -0.5,y 跨越值 dy = -1
(2,6) - (2,3):斜率不存在,y 跨越值 dy = -3
(2,3) - (6,1):斜率 k = 0.5,y 跨越值 dy = -2
有序边表 ET 如下:
y = 1:(6,1) - (8,5),(6,1) - (2,3)
y = 3:(2,3) - (6,1)
y = 5:(6,1) - (8,5)
y = 6:(2,6) - (6,7)
y = 7:(6,7) - (2,6)
全部 AET 初始为空。
开始扫描线,从上往下逐行处理每个像素点。在处理到某一行时,将 y 坐标等于当前行的边从 ET 中移动到 AET 中,并按照 x 坐标从小到大的顺序排序。
例如在 y = 1 时,将 (6,1) - (8,5) 和 (6,1) - (2,3) 从 ET 中移动到 AET 中,并按照 x 坐标从小到大的顺序排序,得到:
AET:(6,1) - (2,3) - (8,5)
接着对 AET 中的边进行两两配对,每对边填充当前行的像素点。最后将当前行的所有像素点填充完毕后,更新 AET 中每条边的 x 坐标,并将已经处理完毕的边从 AET 中移除。
以 y = 1 和 y = 2 的处理过程为例:
y = 1:
- 配对 (6,1) - (2,3):像素点为 (6,1),(5,2),(4,2),(3,3),(2,3)
- 配对 (2,3) - (8,5):像素点为 (2,3),(3,3),(4,4),(5,4),(6,5),(7,5),(8,5)
- 更新 AET:(6,1) - (8,5),(2,3) - (8,5)
y = 2:
- 配对 (6,1) - (8,5):像素点为 (6,2),(7,3),(8,4)
- 更新 AET:(2,3) - (8,5)
继续按照相同的方式处理下去,直到扫描完整个多边形。
原文地址: https://www.cveoy.top/t/topic/K0j 著作权归作者所有。请勿转载和采集!