【问题标题】:Weighted random coordinates加权随机坐标
【发布时间】:2014-05-16 17:02:46
【问题描述】:

这可能更像是搜索一个术语,但也欢迎解决方案。我正在寻找创建 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。

【问题讨论】:

    标签: math random weighted


    【解决方案1】:

    这在极坐标中更容易。您所要做的就是生成一个均匀的随机角度和一个功率分布的距离。下面是一个 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)的分布:

    我们可以使用randomPoint(1, 2, 1, 1) 将其移动到另一个点(例如 1,2)的中心:

    我们可以通过扩大规模来扩大范围。这里是randomPoint(0, 0, 3, 1)

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

    【讨论】:

    • 我知道一个 python 人会在这里找到答案。我可能可以多次运行此程序以在单个平面上获得多个加权坐标。谢谢
    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2010-09-08
    相关资源
    最近更新 更多