问题描述
所以我制作了这个简单的函数来使用 pygame 返回一个大小为 1 的随机向量,基本上是一个随机向量,然后被归一化(给出一个方向)。但是,当我运行调用此函数的 for 循环时,有些方向是相同的,如果不只是翻转 180 或 smth。我迭代了 3 次,只是因为如果它不能做 3 个随机向量,我不能相信它可以做数百个......
import random
import math
from pygame import Vector2
def random_direction():
vector = Vector2(random.uniform(-10,10),random.uniform(-10,10))
if vector.length() == 0:
return vector
else:
return Vector2.normalize(vector)
for i in range(3):
v = random_direction()
print(v)
print(math.degrees(math.atan2(v.y,v.x)))
输出示例:
[-0.481089,0.876672]
118.75655978063934
[0.524372,0.851489]
58.374037634092204
[-0.504321,0.863516]
120.2862923019005
如您所见,第二个和第三个角度相同,只是翻转了。我尝试过其他 PRNG,但没有对它们进行标准化,但似乎没有任何改变。
解决方法
另一种解决方案是在 [0,2*PI] 范围内生成一个随机角度。从角度计算向量:
angle = random.uniform(0,math.PI*2)
vector = Vector2(math.cos(angle),math.sin(angle))
或
vector = Vector2(1,0).rotate_rad(random.uniform(0,math.PI*2))
,
在对象的类中实现了该函数,我想给出随机方向并在 for 循环中创建 n 个对象。因此,将其作为对象属性与其他属性一起实现,而不是连续 3 次查找随机向量即可修复它...