在一个已知边界的2D网格世界中,有以下元素:
- 光源(蓝色
org
) - 墙壁(灰色)
如何高效地从网格中每个白色方块的中心向org的中心进行光线追踪?
对于每个方块,我希望得到一个布尔值 - 它是否被照亮。
换句话说,我希望确定org
是否可以直接看到整个世界中的每个方块。
我的拙劣解决方案
使用标准的光线追踪方法追踪每个白色方块指向org
,但其性能非常差。我觉得有很多计算是多余的。
相关 : https://en.wikipedia.org/wiki/Any-angle_path_planning : 该算法仍然是针对一个白色方块 - 不是整个世界。
回答:
您可以使用像Bresenham线算法或Xiaolin Wu线算法这样的线算法来查找路径中的像素。
- 从您想要计算是否被照亮的像素开始。
- 沿着光的方向遍历像素。
- 如果您首先到达光源,则它被照亮。
- 如果您碰到一个被阻挡的像素,则它是黑暗的。
这同样适用于多个光源。这样做会很高效,因为您只为每个像素计算一条线。