0

大学で数学を勉強してからしばらく経ちましたが、今では思ってもいなかったほど数学が必要になりました。

だから、これが私が達成したいことです: 3D ポイントのセット (地理的なポイント、緯度と経度、高度は関係ありません) を持っているので、考慮したい方向を考慮して、それらを画面に表示したいと考えています。これはカメラとコンパスと一緒に使用する予定なので、カメラを北に向けたときに、カメラが「見る」べきポイントをコンピューターに表示したいと考えています。拡張現実の一種です。

基本的に(私が思うに)必要なのは、上から見た3Dポイント(Googleマップでポイントを表示するなど)を、側面から見た3Dポイントのセットに変換する方法です。

4

5 に答える 5

4

緯度と経度を 3D デカルト (x、y、z) 座標に変換するには、次の (Java) コード スニペットを使用します。うまくいけば、選択した言語に簡単に変換できます。latlngは、最初は緯度と経度を度単位で表したものです。

lat*=Math.PI/180.0;
lng*=Math.PI/180.0;
z=Math.sin(-lat);
x=Math.cos(lat)*Math.sin(-lng);
y=Math.cos(lat)*Math.cos(-lng);

ベクトル (x,y,z) は常に半径 1 の球体上にあります (つまり、地球の半径は 1 にスケーリングされています)。

そこから、カメラの位置と角度を指定して、(x,y,z) を (X,Y) スクリーン座標に変換するために 3D 透視投影が必要です。たとえば、http://en.wikipedia.org/wiki/3D_projectionを参照してください。

于 2009-10-04T22:11:19.370 に答える
2

誰かがこれらのパラメータが何を意味するのか正確に説明できますか?私が試した結果は非常に奇妙なので、パースペクティブプロジェクションのパラメータのいくつかを誤解していると思います

*  {a}_{x,y,z} - the point in 3D space that is to be projected.
* {c}_{x,y,z} - the location of the camera.
* {\theta}_{x,y,z} - The rotation of the camera. When {c}_{x,y,z}=<0,0,0>, and {\theta}_{x,y,z}=<0,0,0>, the 3D vector <1,2,0> is projected to the 2D vector <1,2>.

* {e}_{x,y,z} - the viewer's position relative to the display surface. [1]
于 2009-10-05T12:59:09.303 に答える
2

それは、必要な精度の程度に大きく依存します。地球上の任意の地点を高精度でクローズ イン ビューで作業している場合は、地球の楕円体形状を考慮する必要があります。これは通常、38 ページの「地理座標とデカルト座標の間の変換」で説明されているアルゴリズムと同様のアルゴリズムを使用して行われます。

http://www.icsm.gov.au/gda/gdatm/gdav2.3.pdf

高精度が必要ない場合は、上記の手法で問題なく機能します。

于 2009-10-04T22:27:08.097 に答える
0

まあ、ちょっとしたアドバイスですが、この点を 3D 空間にプロットできます (これは、openGL を使用して簡単に行うことができます)。緯度/経度を極座標やデカルト座標などの別のシステムに変換する必要があります。したがって、緯度/経度から始めて、データをデカルト座標に変換する必要があるよりも、空間の原点を心臓の中心に置きます。

z= R * sin(long) x= R * cos(long) * sin(lat) y= R * cos(long) * cos(lat) R は世界の半径です。あなたの視点とあなたが「見る」必要があるポイントとの間の方向をつかむだけでよい

作成した空間のポイントに仮想カメラを配置し、実際のカメラ (単純にベクトル) からのデータを仮想カメラのデータにリンクするよりも。

やりたいことを達成するための次のステップは、「仮想空間」と重なるカメラの timage をプロットすることです。仮想空間で仮想カメラを移動するためのコントロールである実際のカメラが必要です。

于 2009-10-04T22:19:09.873 に答える
0

3D ベクトル演算を使用して原点を移動し、おそらくクォータニオン ベースの回転関数を使用してベクトルを回転させて方向に合わせる必要があります。クォータニオンを使用して 3D ベクトルを回転させる方法については、数多くの優れたチュートリアルがあり (レンダリングなどによく使用されるため)、ベクトルがどのように表現されるかを覚えていれば、3D ベクトルに関するものは非常に単純です。

于 2009-10-04T22:07:12.840 に答える