1

単位ベクトル a = Vector(0,1,0) があり、x = Vector(-0.2,0,-0.2) と y = Vector(0.2,0,0.2) の間に何かのランダムな広がりを追加したいとしましょう。 )、どうすればそれを行うことができますか?

x と y の間のランダムなベクトルを単純に生成するとしたら、正方形の境界内のどこかで値が得られます。

四角

代わりに、x と y で構成される円内の値が必要です。

サークル

これは単純な問題のように思えますが、今のところ解決策がわかりません。どんな助けでも大歓迎です。

(これは実際には「研究レベルの数学の質問」ではないため、mathoverflow では質問しませんでした)

4

1 に答える 1

1

あなたの質問を正しく読めば、特定の長さ (円の半径) 内にあるランダムな方向のベクトルが必要になります。

円の式は次のとおりです。x 2 + y 2 = r 2

したがって、ベクトルの長さを制限する最大半径rがある場合は、おそらく次のように進めます。

  1. -r+rの間にあるxのランダムな値を選択します
  2. 選択したxに基づいてyをランダム化するための制限を計算すると、y lim = sqrt(r 2 - x 2 )
  3. 最後に、 -y lim+y limの間でyのランダムな値を選択します。

そうすれば、xのランダムな方向とyのランダムな方向が得られますが、ベクトルの長さは0からrの範囲内にとどまるため、その半径の円内に制約されます。

あなたの例では、rは約0.28284であるsqrt(0.2 2 )であるべきだと思われます。

アップデート

3D ベクトルには長さ (または大きさ) sqrt(x 2 +y 2 +z 2 )があるため、この手法を 3D に拡張できますが、おそらく別のアプローチを好むでしょう (これは 2D でも機能します)。

  1. 任意の xyzを選択してランダムな方向を選択します
  2. 大きさを計算するm = sqrt(x 2 +y 2 +z 2 )
  3. x = x/my = y/mz=z/mのように、方向ベクトルを (各要素をその大きさで割ることにより) 正規化します。
  4. ここで、ランダムな長さLを0からrの間で選択します
  5. 方向ベクトルをランダムな長さでスケーリングします。したがって、 x = x * Ly = y * Lz = z * L
于 2013-11-17T08:01:12.357 に答える