首先需要根据给定的多边形顶点坐标,确定每条边的起点和终点,并计算出每条边的斜率和 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)

继续按照相同的方式处理下去,直到扫描完整个多边形。

1已知多边形各顶点坐标61856726和23写出有序边表填充算法中的 ET 及全部 AET 的内容。

原文地址: https://www.cveoy.top/t/topic/K0j 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录