1.问题描述与算法思想
- 问题描述
多边形颜色渐变填充,设计实现多边形的填充类,设置顶点序列,调用填充函数。通过建立多边形的桶表和边表的数据,按照算法步骤依次扫描填充。调用设计实现的多边形填充类,对所绘制出来的多边形进行颜色渐变填充。
- 算法思想
- 有效边表填充算法原理
在多边形填充过程中,常采用:“下闭上开”和“左闭右开”的原则对边界像素进行处理。有效边表填充算法通过维护“桶表和边表”数据,节省了有效数据存储空间,避免了扫描线与多边形所有边求交的运算耗时。“桶表”是按照扫描线顺序管理边的出现情况的一个数据结构,每个结点对一条扫描线。将每条边的“边表”链入与该边最小y坐标(ymin)相对应的桶处,边表结点的数据结构如图下所示:
x|ymin |
ymax |
1/k |
next |
有效边表填充算法的实现步骤为:
1.根据多边形的顶点序列,建立其“桶表和边表”数据。
b) 按照扫描线从小到大的移动顺序,取出当前扫描线对应桶的边 表数据。
c) 如果“桶表”数据已经取完,则填充结束;否则,继续后续填 充操作。
d) 将当前桶里的边表数据加入到有效边表,根据“下闭上开”的 原则,删除已经到ymax的无效边;
e) 对当前扫描线的有效边表按x值递增的顺序进行排序、配对, 以确定填充区间;根据“左闭右开”的原则,对两两配对的填 充空间进行像素填充。
f) 继续回到步骤b。
- 颜色渐变填充原理
颜色渐变填充原理可以通过双线性插值的方法的以实现,具体的实现公式如下所示:
- 边AC上的D点的渐变色为:
CD=yD-yCyA-yCCA+yA-yDyA-yCCc
- 边BC上的E点的渐变色为:
CE=yE-yCyA-yCCB+yA-yEyA-yCCc
- 边DE上的F点的渐变色为:
CF=xF-xExD-xECD+xD-xFxD-xECE
2.详细设计
1.首先声明二维点类“CP2”、边表类“CAET”和桶表类“CBucket”,用于 存储和传递多边形“桶表和边表”数据。多边形填充类中主要包括存放 多边形顶点数