我们在上一篇文章中介绍了判断一个点是否在图形内的算法,那如果是大量的点呢?例如我们要在一个2000*2000的画布中,把所有在图形内的点填充为红色,在外面的填充为绿色。这样的话,我们就要对4百万个点进行区域判断,这个计算量是非常巨大的。
对于上一篇中介绍的方法,我们有一些优化的空间,例如:
(1)因为三角函数的计算是很耗时的,先把cos和sin值求出来。
(2)矩形的判断是比较快速的,可以先求出椭圆和多边形的外接矩形,如果在外接矩形外,肯定就不会在图形内了。
但是这样的优化之后,计算量仍然是巨大的。实际上,我们有更好的方法。
对于要判断大量点是否在图形内的场合(这个场合的点肯定是整型的),更有效的方法是:
(1)求出图形的边界像素点。
(2)使用填充的算法找出边界点内所有的像素点。
对于第一步,我们可以使用Bresenham算法,而第二步可以使用FloodFill算法。这些算法都可以搜索得到,在这里不再具体介绍。