新的编程,我的第一个项目之一,我遵循一个boid模拟的代码,我不确定sin和cos函数在这部分代码中做什么。在
N = numer of boids
angles = 2*math.pi*np.random.rand(N)
vel = np.array(list(zip(np.sin(angles), np.cos(angles))))
一般来说,代码是为boid设置随机向量,但是为什么随机角度本身就不够?在
对于单位速度的定义,正弦函数和余弦函数的作用是什么?在
它是否为单独计算的boid速度提供了参考条件?在
Tags:
TL;DR
angles
是一个随机方向的数组。cos
和sin
将指向这些方向的单位向量分解为它们的x
和{更长的解释
这段代码初始化指向随机方向的
N
单位速度向量。最合理(也是最简单)的方法是N
随机角,以及对于每个角度
theta
,将单位向量(1, theta)
从极坐标转换为笛卡尔坐标,转换为第1步。完成
^{pr2}$第二步。可以分解为
请注意,在您的代码中,
np.sin(angles)
被用作x坐标,这不是严格正确的,但是这并不重要,因为角度是随机的,并且是一致的。在仅供参考,另一种创建
(x, y)
对的方法是这要快得多,因为它只处理Numpy对象,没有中间的Python
list
。在编辑
这是一个关于cd2的点。在
最上面一行显示了小角度(0<;}的交换会有所不同,您必须小心地跟踪您要如何测量角度。在
theta
<;π/4)的速度矢量,在这种情况下,sin
和{最后一行显示了均匀随机角度的速度向量,其中交换坐标会使结果看起来非常相似。在
在这种情况下,速度不仅仅是(标量)速度。它是一个向量,所以它描述了方向和速度。单位/秒的实际速度就是速度矢量的长度。在
在这段代码中(类似于示例实现here),每个Boid的初始速度是1,尽管它们朝着每个可能的方向发展。在
同样的情况发生在this implementation in Processing。在
相关问题 更多 >
编程相关推荐