TL;博士
angles
是一组随机方向。cos
并将sin
指向这些方向的单位向量分解为它们的x
和y
分量。
更长的解释
此片段初始化指向随机方向的N
单位速度向量。最合乎逻辑(也是最简单)的方法是
- 初始化
N
均匀分布在 0 和 2π 之间的随机角度,以及
对于每个角度theta
,将单位向量(1, theta)
从极坐标转换为笛卡尔坐标,其转换为
x = cos(theta)
y = sin(theta)
步骤 1. 完成
angles = 2 * math.pi * np.random.rand(N)
Step 2. 可以分解为
# arrays of x- and y-coordinates
velx = np.cos(angles)
vely = np.sin(angles)
# create (x, y) pairs and convert to np.array
vel = np.array(list(zip(velx, vely)))
请注意,在您的代码中,np.sin(angles)
它用作 x 坐标,这并不完全正确,但这并不重要,因为无论如何角度都是随机且均匀的。
仅供参考,另一种创建(x, y)
配对的方法是
vel = np.vstack([velx, vely]).T
这要快得多,因为它专门处理 Numpy 对象,没有中间 Python list
。
编辑
为了详细说明我关于使用sin
and cos
for x
and的观点y
,这里有一张图片。
最上面一行显示了小角度 (0 < theta
< π / 4) 的速度矢量,在这种情况下交换sin
并cos
产生差异,您必须小心跟踪如何测量角度。
底行显示均匀随机角度的速度矢量,其中交换坐标使结果看起来非常相似。