language-agnostic - 光线从单个光源追踪整个 2D 网格
问题描述
在具有已知边界的二维网格世界中,有:-
- 一个光源(蓝色
org
) - 墙壁(灰色)
如何有效地从网格中每个白色块的中心到中心进行光线追踪?
对于每个块,我想要一个布尔值 - 无论它是否被点亮。org
换句话说,我想确定是否org
可以直接看到每个块(对于整个世界)。
我的糟糕解决方案
使用标准的光线追踪来追踪每一个白块org
,但它的性能很差。我觉得很多计算都是多余的。
相关:https ://en.wikipedia.org/wiki/Any-angle_path_planning:该算法仍然适用于一个白色块 - 而不是整个世界。
解决方案
您可以使用诸如Bresenham 的线算法或Xiaolin Wu 的线算法之类的线算法来查找路径中的像素。
- 从您要计算是否点亮的像素开始。
- 沿光的方向遍历像素。
- 如果你先打灯,那么它就亮了。
- 如果你碰到一个被阻挡的像素,那么它就是黑暗的。
同样也可以用于多个灯。这将是有效的,因为您只为每个像素计算一条线。
推荐阅读
- javascript - Graylog 2 Collector-Sidecar 配置未正确合并多行消息
- c# - .master 扩展请求在 asp.net 中被过滤
- go - 是否有任何可用于 Golang 依赖项的缓存代理,例如 NPM(NodesJS)?
- csv - 稀疏矩阵输出到 csv
- javascript - Dropzone文件上传未知问题
- javascript - 如何使用按钮返回 javascript (Angular Material) 中的最后一个选项卡?
- docker - 运行 10 个 Docker Spring Boot 容器。应用程序的哪些部分在运行时共享?
- bootstrap-4 - Bootstrap 进度条从中心开始向左或向右扩展
- python - Selenium webdriver 超时后停止
- javascript - 如何向这个 js 文件添加状态构造函数?