考虑一个二维网格,比如1000x1000个单元格的大小,作为游戏中一关卡的地图。此地图在运行时动态填充了游戏对象。现在我们需要计算将新对象放置到该网格中给定x/y位置的概率。
已经有一个int数组,它保存了靠近x/y位置的游戏对象数量。该数组的索引表示到给定单元格的距离,数组中的每个值告诉该距离处网格上的游戏对象数。例如,该数组可能如下所示:
这意味着在x/y格子中没有0个对象,相邻的格子中也没有0个对象,与两个单元格距离的单元格中有1个对象,在三个单元格距离的单元格中有2个对象,以此类推。以下图示说明此示例:
任务现在是根据该数组中的值计算在x/y处放置新对象的可能性。算法应该是这样的:
- 如果至少有一个对象比min更近,则概率必须为0.0 - 否则,如果没有对象在max距离内,则概率必须为1.0 - 否则,概率取决于有多少对象靠近x/y,以及有多少个对象。
换句话说:如果已经有至少一个游戏对象非常接近,我们不想要一个新的对象。另一方面,如果没有对象在max半径内,我们无论如何都想要一个新对象。否则,我们希望根据靠近x/y的其他对象数量以及它们的距离来放置一个新对象——越靠近的对象越多,距离越近,我们就越不希望放置一个新对象。
希望我的描述清楚易懂。您能想到一个优雅的算法或公式来计算这个概率吗?
PS:对于这个问题的标题,我很抱歉,我不知道如何更好地概括我的问题。
已经有一个int数组,它保存了靠近x/y位置的游戏对象数量。该数组的索引表示到给定单元格的距离,数组中的每个值告诉该距离处网格上的游戏对象数。例如,该数组可能如下所示:
0, 0, 1, 2, 0, 3, 1, 0, 4, 0, 1
这意味着在x/y格子中没有0个对象,相邻的格子中也没有0个对象,与两个单元格距离的单元格中有1个对象,在三个单元格距离的单元格中有2个对象,以此类推。以下图示说明此示例:
任务现在是根据该数组中的值计算在x/y处放置新对象的可能性。算法应该是这样的:
- 如果至少有一个对象比min更近,则概率必须为0.0 - 否则,如果没有对象在max距离内,则概率必须为1.0 - 否则,概率取决于有多少对象靠近x/y,以及有多少个对象。
换句话说:如果已经有至少一个游戏对象非常接近,我们不想要一个新的对象。另一方面,如果没有对象在max半径内,我们无论如何都想要一个新对象。否则,我们希望根据靠近x/y的其他对象数量以及它们的距离来放置一个新对象——越靠近的对象越多,距离越近,我们就越不希望放置一个新对象。
希望我的描述清楚易懂。您能想到一个优雅的算法或公式来计算这个概率吗?
PS:对于这个问题的标题,我很抱歉,我不知道如何更好地概括我的问题。