我希望生成随机浮点数来填充虚拟现实世界中的对象,使用浮点数来定义对象的位置。现在很容易统一填充"框#34;使用random.uniform调用的对象。
import random
#generate random floating coordinates
for z in range(1000):
x = random.uniform(-1,1)
y = random.uniform(-1,1)
z = random.uniform(-1,1)
#shape = vizshape.addSphere() commented out because this is an uncommon module for VR but I wanted to show how floats are being used
#shape.setPosition([x,y,z])
我想要做的是将参数传递给random.uniform(),指定多个范围以生成浮点数,例如:
x = random.uniform([-1,1],[2,3])
当然这会导致错误,但我正在寻找一种方法来获得多个,大小变化,不连续范围的浮动。我想不做另外检查,看看生成的花车是否在我想要的范围内,然后决定保持或扔掉。有什么想法吗?
答案 0 :(得分:1)
这有点像黑客,但可以很容易地推广到多个不连续的范围:
import random
def getRandoms(n, ranges):
answer = []
for _ in xrange(n):
low,high = random.choice(ranges)
answer.append(random.uniform(low, high))
return answer
答案 1 :(得分:1)
这个想法是首先随机查看范围,然后在所选范围内浮动。然而,问题是,为了使其在所有范围内均匀,应考虑它们的长度。否则,从长远来看,较短的范围将获得与较长范围相同数量的样本,这不是一致的行为。
为了解决这个问题,我们可以将所有范围映射到例如区间[0,1]
,以保持相对长度。方法如下: