加权随机坐标

时间:2014-05-16 17:02:46

标签: math random weighted

这可能更像是一个术语的搜索,但也欢迎解决方案。我正在寻找创建n个随机x,y坐标。我遇到的问题是我希望坐标是"加权"或者有更多机会接近特定点。我使用这个伪代码创建了一些东西:

x = rand(100) //random integer between 0 and 100
x = rand(x) //random number between 0 and the previous rand value
//randomize x to positive or negative
//repeat for y

这可以将对象拉向0,0 - 但是如果您创建了足够的点,则可以看到x和y轴的图案。这是因为即使x设法达到100,y接近的可能性也很高。

我希望避免形成这条x,y线。如果有一种方法可以投入多个加权坐标,那么奖励积分就会增加。随机坐标会倾向于,而不是静态到0,0。

1 个答案:

答案 0 :(得分:4)

这在极坐标中更容易。您所要做的就是生成均匀的随机角度和功率分布距离。这是Python中的一个例子:

import math
from random import random

def randomPoint(aroundX, aroundY, scale, density):
  angle = random()*2*math.pi

  x = random()
  if x == 0:
    x = 0.0000001

  distance = scale * (pow(x, -1.0/density) - 1)
  return (aroundX + distance * math.sin(angle),
          aroundY + distance * math.cos(angle))

以下是randomPoint(0, 0, 1, 1)的分布:

Points spread out, more dense at the origin

我们可以将它转移到另一个点,例如1,2 randomPoint(1, 2, 1, 1)

Points spread out, more dense at the 1,2

我们可以通过增加规模来扩展更大的区域。这是randomPoint(0, 0, 3, 1)

Points spread out randomly over a larger area

我们可以通过改变密度来改变形状,即聚集在一起的趋势。 randomPoint(0, 0, 1, 3)

Points tightly centered around the origin