• ベストアンサー

プラネタリウム的な座標変換を行うには?

当方、プラネタリウムソフトのようなものをつくろうと思っています。 その際で、下記のような座標変換方法に苦しんでおります。 緯度(θ)と経度(φ)を設定すると、ディスプレイ上の決まった位置に図形を表示させる ということをしたいのです。球体の中心に自分がいて、ある画角で、球体表面を 平面と近似してディスプレイに表示させます。プラネタリウムになぞらえるならば、 星(ある図形)は静止状態にあって、観察者が見る角度を変える(θ,φを変える)かんじです。 図が描けないので、伝わるか心配ですが、、 全体としては球体のθ,φの座標空間で、球の中心を原点としており、 ディスプレイ上はX,Y平面で画面中央を原点としています。 例えば、(θ, φ) = (0, 0)を中心とする適当な半径の円を描きます。 で、この円が今、ディスプレイの中央にあるとします。 ここで、θのみを増加させる、つまり右を向くと、円はディスプレイ上を左へ動きます(Y不変で X軸負の方向へ)。 これが、(θ, φ) = (π/2, 0)を中心とした円として、またディスプレイの中央に あるとすると、経度を変化させても円は中央に静止したままとなります。 一応、画角π/6、-π≦θ<π、 -π/2≦φ<π/2、-128≦X<128、-128≦Y<128 としています。 というわけで、(θ, φ)→(X, Y)の変換はどのような考え方のもとに行ったらよいのでしょうか? という質問です。 どこか、このようなプログラミングに関して解説しているサイトのご紹介でも結構です。 ご好意ある方、何卒よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.2

xy平面に平行なスクリーンと、星と原点を結んだ直線の交点を求めるのと同じですよね。 画角がπ/6で、スクリーン上の円の半径が100だとすると、 スクリーンは z = 100 / tan((π/6) / 2) になり、 交点座標は、(x = z * tan(φ), y = z * tan(θ)) になります。 画角外の星は計算も表示も不要で、交点座標とスクリーンの原点との距離が100より大きいものを表示しなければ円の形になります。 これは大学の課題ですか?

nasda
質問者

お礼

なるほど!そういう考え方なんですね。 なんとかできそうです。 大学の課題ではなく、自主的にというかんじです。 ありがとうございます。

その他の回答 (1)

  • etendard
  • ベストアンサー率35% (77/216)
回答No.1

えーと、(θ, φ)は基準方向に対する視線の方位と仰角ということですね。 これはロボティクスで言うフォワード変換に当たると思います(違ったらごめんなさい)。 Googleあたりから「回転行列」で検索してみると、 いろいろと参考になりそうなサイトが見つかると思います。 ここで字面であれこれ説明するよりも、そちらの方が分かりやすいかと。 ちょっと難しいかもしれませんが、慣れてしまえば色々な局面で応用が利きますし。

参考URL:
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E5%9B%9E%E8%BB%A2%E8%A1%8C%E5%88%97&num=50
nasda
質問者

お礼

ありがとうございます! 「回転行列」でかなりいい線のサイトが色々みつかりました。がんばってみます。

関連するQ&A