Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 简单随机向量函数多次返回同一方向_Python_Pygame - Fatal编程技术网

Python 简单随机向量函数多次返回同一方向

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

所以我用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,数学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出于某种原因,这是同一件事……对不起,但方向不同。问题是什么?