我正在开发一个有趣的简单地图应用程序,我需要做的一件事是找到(并着色)从当前位置可见的所有点。在这种情况下,点是像素。我的地图是一个光栅图像,其中透明像素是开放空间,而任何其他像素都是不透明的。(没有半透明像素;alpha 为 0 或 100%。)从这个意义上说,它有点像常规的泛光填充,限制是每个填充的像素必须有清晰的视线到原点。下图显示了几个这样的区域(小十字线是原点,白色 = 透明):
( http://tinyurl.com/nf3nqa4 )
此外,我最终感兴趣的是“边界”其他颜色的点,即我想要构成可见区域边缘的点列表。
我当前且非常低效的解决方案是我上面描述的修改后的洪水填充。这种方法返回正确的结果,但由于需要将行上的每个像素迭代到泛洪填充中每个像素的原点,因此速度非常慢。我的图像被缩小和量化,但我仍然需要大约 1MP 才能获得可接受的精度,典型的 LoS 区域每个至少 100,000 像素。
我很可能使用了错误的搜索词,但我无法找到任何可以解决这种(光栅化)LoS 案例的算法讨论。