0

画面の中心点から等距離のベクトルを生成しようとしています。

以前は、以下のアプローチに従っていました 1. x、y、z の乱数 Random(0-400, 0+400) を生成します
2. ベクトルを正規化し
ます 3. 必要な距離にスケーリングします

ただ、これは私の原点が0の時でした。さて、画面の中心から、こういうことをしなければならないということです。私は次のアプローチをとろうとしましたが、これは何らかの理由で正の象限でのみ x と y を与えています (z はうまくいきます)。

//Origin (midpointX of screen, midPointY of screen,  z=0)
//vector<Vec3f> positions;
//positions.push_back(getPoint().scale(300);

getPoint{
Vec3f rVector;
rVector.set( Random(midPointX-100,midPointX+100), Random(midPointY-100,midPointY+100), Random(0-100,0+100)    );
}

これらすべての点が、ある半径の球の表面上にあると仮定します。したがって、これらは中心 (x、y、z) から等距離にあります。これらのポイントを生成するためのより良いアプローチを知ることは素晴らしいことです.
私はアルゴリズムだけで大丈夫です。

4

1 に答える 1

3

角度のpdf(確率分布)は気になりますか?立方体に均一に分散されたランダムな点を生成することにより、立方体の角の方向を優先する傾向があります。これは、球の表面上のランダムな点をサンプリングすることとは明らかに異なります。

球の表面に均一な分布が必要な場合は、たとえば球のポイントピッキングを試してください(基本的に、xyz座標ではなく、独立して角度を生成します)

球を原点から別の点に移動する限り、他の人が指摘しているように、それは最終結果(極座標から計算されたxyz座標)に定数を追加するだけの問題です。

于 2012-12-30T15:44:05.547 に答える