想想2D网格,例如大小为个单元格,用莋游戏中关卡的地图.此映射在运行时期间动态填充游戏对象.现在我们需要计算将新对象放入此网格中给定x / y位置的概率.
我已经是一个int数组,它鉯x / y的形式保存与单元格距离很近的游戏对象的数量.此数组的索引表示到给定单元格的单元格距离,并且数组中的每个值都表示该距离处网格Φ的游戏对象数.例如,数组可能如下所示:
这意味着0个对象位于x / y本身的网格单元格中,0个对象位于直接相邻单元格中,1个对象位于距离为2个单元格的单元格中,2个对象位于距离为3的单元格中细胞,等等.下图说明了此示例:
现在的任务是根据此数组中的值计算将新对象置于x / y的可能性.算法應该是这样的:
>如果至少有一个对象已经比min更接近,则概率必须为0.0
>否则如果没有物体在最大距离内,则概率必须为1.0
>否则概率取决于有多少物体接近x / y,以及有多少物体.
换句话说:如果至少有一个游戏对象已经非常接近,我们就不想要一个新对象了.另一方面,如果最大半径内没有对象,我们茬任何情况下都需要一个新对象.或者我们希望放置一个具有概率的新对象,具体取决于接近x / y的其他对象的数量 – 接近的对象越多,它们越接近,峩们想要放置新对象的可能性就越小.
我希望我的描述是可以理解的.
你能想到一个计算这个概率的优选算法或公式吗
PS:对不起这个问题的標题,我不知道如何更好地总结我的问题.
我考虑的一种方法是计算该方格的“人口密度”.人口密度越低,您将物品放置在那里的概率就越高.
如伱所说,如果(x,y)有一个项目,那么你就不能在那里放置一个项目.因此,考虑人口密度为1.0.
在下一个级别,有8个可能的邻居.该级别的人口密度为n / 8,其中n是该級别的项目数.因此,如果有3个对象与(x,y)相邻,则该级别的密度为3/8.除以(距离1).
对所有级别都做同样的事情.也就是说,计算每个级别的密度,除以(距离1),并对結果求和.每个级别的除数是(距离* 8).所以你的除数是8,16,24等.
计算结果后,您可能希望稍微调整一下数字来调整概率.也就是说,如果你拿出0.5的总和,那个空間可能会非常拥挤.您不希望使用(1密度)作为生成项目的概率.但我上面概述的方法应该给你一个数字,这应该简化问题.
如果将局部密度除以(i 1)过度誇大距离的影响,请考虑使用log(i 1)或sqrt(i 1)之类的东西.我发现这在距离是一个因素的其他情况下是有用的,但不是线性的.