跟踪区域网格中受影响的节点

时间:2017-11-10 12:06:05

标签: algorithm grid nodes

我的网格上有不同的节点。所有节点都有一个可以设置为true或false的属性,让我们调用它"点亮"

从某些节点,您可以设置" light"。这些灯有一个范围,受影响的节点将有他们的"点亮"属性设置为true。只要没有光线在范围内,节点就会保持亮起"点亮"假的。

设置节点时没有问题,或者在设置灯光时检查哪些节点受到影响。

但是我不知道如何处理关灯:如果你打开灯,你知道你必须将受影响的节点设置为点亮;但是当一盏灯熄灭时,一些节点可能会被另一盏灯照亮,因为它们会受到另一盏灯的影响。

我的第一个方法是让每个节点知道有多少光影响它,当灯关闭时,减少受影响节点的值,一旦达到0就关闭它。

这看起来很简单,但我觉得当我实现移动灯时,这会使代码混乱,这将不得不破坏前灯并在新位置创建一个新灯。

你能想出一个更有效的方法来处理这个问题,速度而不是存储是主要问题吗?

详细信息:网格可以包含没有节点的单元格。事实上,超过一半的网格没有节点,这就是我目前使用字典存储节点信息的原因。

网格可以有多种尺寸,在最极端的情况下为100x100。

可以有几个静止和移动的灯,但同时永远不会超过30个,这可能非常接近,因为它取决于用户输入。

1 个答案:

答案 0 :(得分:1)

我只看到两个选择 - 我认为你意识到计算光源熄灭时应该关闭哪些节点太重了。所以剩下的选择:

  1. 当灯熄灭时,从头开始重新计算所有点亮的节点(当灯亮时,您可以继续更新而无需重新计算整体)。

  2. 如您所知,跟踪每个给定节点点亮的节点数。

  3. 我认为第二个建议是赢家,特别是如果你重铸你的心智模型 - 想象每个节点有两个属性:lightsource是真还是假,lightlevel是一个int。您可以在可设置节点上更新lightsource。并且lightlevel将跟踪在此节点上投射光的节点数。当级别为1或更高时,在问题的措辞中点亮。 (而且,我想,当lightlevel设置为true时,每个可设置节点也会为它自己的lightsource添加1。

    根据您的建模情况,您甚至可以将这些额外信息用于您的利益......例如,如果您正在为实际可见光建模,则可以使具有较高lightlevel的节点显示不同,等等