Python 简单随机向量函数多次返回同一方向
所以我用pygame做了一个简单的函数来返回一个大小为1的随机向量,基本上是一个随机向量,然后被归一化(给出一个方向)。然而,当我运行一个for循环调用这个函数时,有些方向是相同的,如果不是翻转180或smth的话。我迭代了3次,只是因为如果它不能做3个随机向量,我就不能相信它能做几百个Python 简单随机向量函数多次返回同一方向,python,pygame,Python,Pygame,所以我用pygame做了一个简单的函数来返回一个大小为1的随机向量,基本上是一个随机向量,然后被归一化(给出一个方向)。然而,当我运行一个for循环调用这个函数时,有些方向是相同的,如果不是翻转180或smth的话。我迭代了3次,只是因为如果它不能做3个随机向量,我就不能相信它能做几百个 import random import math from pygame import Vector2 def random_direction(): vector = Vector2(random
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,数学PI*2)
向量=向量2(数学cos(角度),数学sin(角度))
或
vector=Vector2(1,0)。旋转(随机。均匀(0,数学。PI*2))
在一个类中为我想要给出随机方向的对象实现了函数,并在for循环中创建了n个对象。因此,将其作为一个对象属性与其他属性一起实现,而不是在一行中查找3次随机向量,可以修复它…关于random.randint(-10,10)
?哦,我想我知道,可能是pygame使用radiansRandint提供了相同的东西,只是角度的数量更加有限。另外,不要担心最后一行,它只是将向量转换成角度(以度为单位),纯粹是为了分析。另外,不,它看起来完全好,尝试运行3个以上的样本,它应该工作得很好。对于计算机来说,也没有随机这类事情(可能一些科学人员有此想法)他们总是有一个参考,所以它或多或少是伪随机的,这也可能使它看起来不那么随机,但我不知道,到目前为止,您提供的示例似乎很好,只需多运行一点,并在程序中实现,以了解它们的外观,然后您将看到它们是否是随机的[0.50612,0.862463]59.59424561143356[0.926421,-0.37649]-22.116460257976787[0.941912,0.33586]19.624856781257044出于某种原因,这是同一件事……对不起,但方向不同。问题是什么?