<p><strong>TL;DR</strong></p>
<p><code>angles</code>是一个随机方向的数组。<code>cos</code>和<code>sin</code>将指向这些方向的单位向量分解为它们的<code>x</code>和{<cd5>}分量。在</p>
<p><strong>更长的解释</strong></p>
<p>这段代码初始化指向随机方向的<code>N</code>单位速度向量。最合理(也是最简单)的方法是</p>
<ol>
<li>初始化0到2π之间均匀分布的<code>N</code>随机角,以及</li>
<li><p>对于每个角度<code>theta</code>,将单位向量<code>(1, theta)</code>从极坐标转换为笛卡尔坐标,转换为</p>
<pre><code>x = cos(theta)
y = sin(theta)
</code></pre></li>
</ol>
<p>第1步。完成</p>
^{pr2}$
<p>第二步。可以分解为</p>
<pre><code># 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)))
</code></pre>
<p>请注意,在您的代码中,<code>np.sin(angles)</code>被用作x坐标,这不是严格正确的,但是这并不重要,因为角度是随机的,并且是一致的。在</p>
<hr/>
<p>仅供参考,另一种创建<code>(x, y)</code>对的方法是</p>
<pre><code>vel = np.vstack([velx, vely]).T
</code></pre>
<p>这要快得多,因为它只处理Numpy对象,没有中间的Python<code>list</code>。在</p>
<hr/>
<p><strong>编辑</strong></p>
<p>这是一个关于cd2的点。在</p>
<p><a href="https://i.stack.imgur.com/GyyJT.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/GyyJT.png" alt="sin vs. cos"/></a></p>
<p>最上面一行显示了小角度(0<;<code>theta</code><;π/4)的速度矢量,在这种情况下,<code>sin</code>和{<cd2>}的交换会有所不同,您必须小心地跟踪您要如何测量角度。在</p>
<p>最后一行显示了均匀随机角度的速度向量,其中交换坐标会使结果看起来非常相似。在</p>