算法系列之十二:多边形区域填充算法--扫描线种子填充算法

算法系列之十二:多边形区域填充算法--扫描线种子填充算法

分类:算法系列

yboundary_colorstk

seednew_colornew_colorxRightboundary_color

xt

IsPixelValidxt yxspan;

259 /*处理特殊情况,以退出while(x<=xright)循环*/

260 }

261}

最外层的while循环是为了保证区间[xLeft, xRight]右端被障碍点分隔成多段的情况能够得到正确处理,通过外层while循环,可以确保为每一段都找到一个种子点(对于障碍点在区间左端的情况,请参考图(5)所示实例的解释,是隐含在算法中完成的)。内层的while循环只是为了找到每一段最右端的一个可填充点作为种子点。SkipInvalidInLine()函数的作用就是跳过区间内的障碍点,确定下一个分隔段的开始位置。循环内的最后一行代码有点奇怪,其实只是用了一个小“诡计”,确保在遇到真正的边界点时循环能够正确退出。这不是一个值得称道的做法,实现此类软件控制有更好的方法,本文这样做的目的只是为了使代码简短一些,让读者把注意力集中在算法处理逻辑上,而不是冗杂难懂的循环控制条件上。

算法的实现其实就在ScanLineSeedFill()和SearchLineNewSeed()两个函数中,神秘的扫描线种子填充算法也并不复杂,对吧?至此,,种子填充算法的几种常见算法都已经介绍完毕,接下来将介绍两种适合矢量图形区域填充的填充算法,分别是扫描线算法和边标志填充算法,注意适合矢量图形的扫描线填充算法有时又被称为“有序边表法”,和扫描线种子填充算法是有区别的。

<下一篇:扫描线算法(有序边表法)>

宁愿停歇在你门前的那棵树上,看着你,守护你。

算法系列之十二:多边形区域填充算法--扫描线种子填充算法

相关文章:

你感兴趣的文章:

标签云: