我遇到了问题,我不太清楚如何解决。我有一个2d的空间,里面有几个点。我也有一个当前点,这是该空间中的一个点。我想随机选择另一个点,选择更接近我当前点的点的概率更高。我在Java工作。任何提示都将非常感激。
答案 0 :(得分:4)
通过计算1 / distanceFromCurrent
为每个点指定“权重”。
根据这些权重选择一个点。
后一部分的解决方案可以在以下一些答案中找到:
另一种选择是使用java.util.Random.nextGaussian
。调整生成的double,使其表示合理的半径,并选择最接近此半径的相邻点。
答案 1 :(得分:1)
你想要的是,距离当前点越远,它的概率越小,因此你想要使用一个公式,其中距离降低概率如下:
1 / d
d是当前点与另一点之间的距离。
所以你用它做的就是计算每个点的概率1 / d并总结所有这些概率以得到你的总数或世界。
如下所示:
total = 0;
for(MyPoint p : list){
p.probability = 1/(distance(currentpoint,p);
total += p.probability;
}
然后你只需要做
Math.random*total;
并将其与您的积分列表进行比较^^;
杰森
答案 2 :(得分:0)
你需要一些作为距离函数的概率分布,更具体地说,你需要CDF或概率分布的逆CDF作为java函数
/**
* @param distance
* @return probability of choosing a point closer than distance
**/
double someCDF( double distance );
一种可能的选择是指数分布,相应的CDF将是1-Math.exp( distance * r )
,其中r
对于缩放是一些常数。同样,您可以使用许多不同的功能,但这个功能非常容易编码。
然后按距离对点进行排序,
double rnum = Math.random();
for( Point point : sortedPoints )
if( someCDF( distance(thisPoint,point) ) >= rnum )
return point;
会给你你想要的点(技术上是被挑选概率小于或等于1的第一个点 - 均匀随机数,你可以证明它可以反馈长期反向CDF的概率分布运行。)