TL; DR
angles
はランダムな方向に配列されています。 cos
およびsin
これらの方向に沿って指し示す単位ベクトルをx
およびy
コンポーネントに分解します。
長い説明
このスニペットは、ランダムな方向にN
単位速度ベクトルポインティングを初期化します。これを行うための最も論理的な(かつ簡単な)方法は
- であるデカルトに極座標から単位ベクトル
(1, theta)
変換、均一各角度theta
0と2π、および
間に分配N
ランダムな角度を初期化します変換は
x = cos(theta)
y = sin(theta)
手順1.
で達成されているため、座標
angles = 2 * math.pi * np.random.rand(N)
ステップ2. x座標として、あなたのコードでは、np.sin(angles)
は厳密には正しくされていない、使用されているが、それはので、問題ありませんのでご注意
# 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)))
に分解することができますとにかく角度はランダムで均一です。
だけFYI、(x, y)
ペアを作成するための別の方法は、それが中間のPython list
せず、numpyのオブジェクトを独占的に扱うので、これははるかに高速です
vel = np.vstack([velx, vely]).T
です。
編集
sin
を使用してx
とy
ためcos
に関する私のポイントについて詳しく説明するために、ここでの画像です。
上段は違いsin
とcos
を交換その場合、小さい角度(0 < theta
<π/ 4)の速度ベクトルを示し、あなたはどのように追跡するために注意する必要がありますあなたは角度を測定したいと思う。
一番下の行は、均一なランダムな角度の速度ベクトルを示しています。座標を入れ替えると結果はかなり似ています。
厳密には、x座標として使用されるnp.sin(アングル)が正しくないと述べました。何が正しいでしょうか? –
'np.cos(angles)'は「適切な」x座標です。これはあなたの角度が水平から反時計回りに測定されていると仮定しています。あなたの目的のために、あなたがランダムな方向を初期化しようとしているので、角度がどこから測定されるかは関係ありません。 –
ペアになる前に独立した系列であるため、両方ともcosで計算できますか? –