简单的随机向量函数不止一次返回相同的方向

问题描述

所以我制作了这个简单的函数来使用 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 次查找随机向量即可修复它...