• ベストアンサー

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

当方、プラネタリウムソフトのようなものをつくろうと思っています。 その際で、下記のような座標変換方法に苦しんでおります。 緯度(θ)と経度(φ)を設定すると、ディスプレイ上の決まった位置に図形を表示させる ということをしたいのです。球体の中心に自分がいて、ある画角で、球体表面を 平面と近似してディスプレイに表示させます。プラネタリウムになぞらえるならば、 星(ある図形)は静止状態にあって、観察者が見る角度を変える(θ,φを変える)かんじです。 図が描けないので、伝わるか心配ですが、、 全体としては球体のθ,φの座標空間で、球の中心を原点としており、 ディスプレイ上は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

  • 座標変換について

    X-Y平面上にy=x*tanθという直線があります。楕円を原点を中心として角度θ回転させて、直線と平行にさせて、直線の下の部分にある楕円の座標を求めていきたいのです。VBAでやってもうまくいかなかったので、どなたかプログラムの書き方も教えていただけると助かります。

  • 座標変換について

    座標系XYZの空間に点A(X1,Y1,Z1)、点B(X2,Y2,Z2)、点C(X3,Y3,Z3)があります。 この3点を通る円の中心をP(X0,Y0,Z0)とし、 円の存在する平面をx'y'平面とします。 さらに原点を点P、x'軸はPAを通る直線とします。 座標系x'y'z'から円周上の点D(X',Y',Z')を求め 座標系XYZに変換した(X4,Y4,Z4)を求めたいのですが、どうすればよいのでしょうか? 以下のようにすれば求まると思うのですが角度α、β、γの求め方が分かりません。 X'' = X' * cosα - Y' * sinα Y'' = X' * sinα + Y' * cosα Z'' = Z' X''' = X'' Y''' = Y'' * cosβ - Z'' * sinβ Z''' = Y'' * sinβ + Z'' * cosβ X4 = X''' * cosγ + Z''' * sinγ Y4 = Y''' Z4 = Z''' * cosγ - X''' * sinγ よろしくお願いします。

  • 座標系の原点の緯度経度とは?

    緯度経度の値から2点間の距離を求めようと思い調べたところ、以下のようなサイトが見つかりました。 [距離と方位の計算] http://vldb.gsi.go.jp/sokuchi/surveycalc/bl2stf.html ここで計算される測地線長がまさに求めたい値だったので、計算式を調べたところ、 (1)緯度経度から平面直角座標x,yを求める (2)2点の平面直角座標x,yから測地線長を求める という流れになるらしいことはわかりました。 ところが、さてプログラムで計算しようとしたところ、「座標系の原点の経度(緯度)」が計算式の値として必要だということが分かり、説明サイトをみると国土地理院のページが表示されて日本地図に関する座標系原点の緯経度が表示されています。 対象箇所が日本に限らないため何の値を参照してよいものが途方に暮れています。 そもそも座標系の原点とは、どこを指しているのでしょうか。 地図を描く上での原点となると、人によって異なるような。。。 この分野はまったくの素人です。 ご教授お願いいたします。

  • 3次元座標の求め方

    3次元座標の求め方 原点 0,0,0 を中心にした球体面上の正面から見た頂点座標で、 回転による移動後の座標の求め方を知りたいです。 例えば、球面の半径が 100 で、頂点の座標 x1, y1, z1 が 100, 0, 0 にある場合、 Y軸に対してπ/2 rad (90度)回転した座標 x2, y2, z2 は 0, 0, -100 になると思うのですが、 この新たな3つの座標 x2, y2, z2 を導くにはどのように計算しているのでしょうか。 平面上の円運動のように cos sin の組み合わせ等で導き出せるのでしょうか。 x1, y1, z1 から、 Y軸に対してr回転 した場合の各 x2, y2, z3 の出し方 X軸に対してθ回転 した場合の各 x3, y3, z3の出し方 Z軸に対してΘ回転 した場合の各 x4, y4, z4 の出し方 のような形で、導くための計算を順にお教えいただけると嬉しいです。 最終的には、元座標 x, y, z をY軸にr、更にそこからX軸にθ、更にそこからZ軸にΘで X, Y, Z になる、といった形で求められるようになりたいと思っています。 座標は原点 0, 0, 0を中心に 上に行くほどYが「減少」 右に行くほどXが「増加」 奥に行くほどZが「増加」 Y減少 ↑ _ Z増加 │/` ├─→ X増加 という形になっています 自分のわかる限りで質問内容を細かく記述したつもりですが、 数学の知識に乏しいので、記号などの使い方や説明の不備があるかもしれません。 何か不足があった場合には補足させて頂きます。 以上宜しくお願い致します。

  • 座標変換

    私の受ける大学院入試の過去問です。 空間の座標系rに関して x+ 3y -2z +1=0 で表される平面πがある 座標変換r→r’の式が以下であるとき、平面πのr’に関する方程式を求めよ [x] [1 2 3] [x'] [1] [y]=[2 4 5] [y'] +[-2] [z] [3 5 6] [z'] [3] どなたかこの問題の解き方、模範解答を教えて下さい。^_^

  • AutoCADで測量座標から新しい座標原点を求める

    他者から頂いた平面図に標記されている既知の座標点からX,Y軸方向及び原点を求め新しい原点にしたいのですがうまくいきません。 ご存知の方いましたら教えて下さい。

  • excelの乱数を用いて円が重ならない座標を選び出

    excelの乱数を用いて円が重ならない座標を選び出す方法 2次元平面(0<x<100,0<y<100)に同じ半径rの円を重ならないように配置したいのですが、困ってます。 考えとしては 1.まず1個の円の中心座標を決める(R1(x1,y1)とする) 2.2個目の円を、1個目と重ならないよう配置できる中心座標R2(x2,y2)を乱数で決める。 ((x1-x2)^2+(y1-y2)^2>4r^2) 3.3個目の円を、1個目と2個目と重ならないように配置できる中心座標R3(x3,y3)を決める。 ((x1-x3)^2+(y1-y3)^2>4r^2かつ(x2-x3)^2+(y2-y3)^2>4r^2) これを繰り返す。 このような座標をexcelの乱数機能を用いて出すことは可能でしょうか? 皆様のお力をお貸しください。

  • 極座標変換

    教えて下さい。 ある円形の外周を測定したとき(円形の物体を回して測定する。測定器は固定されている。)、横軸を位相、縦軸を測定値とすると、θ(0~n),r(0~n)のデータを極座標変換すると、x(0~n),y(0~n)のデータに置き換わると思います。これを横軸x縦軸yでグラフ化すると円になると思います。ここまでは合ってます? 円形の物体が真円であると仮定すると、横軸位相に対して縦軸測定値は、傾き0の直線になると思います。 しかし、円形の物体を回したときに回転中心と円形の物体の中心がずれていると、偏心して回転するため、直線にならなくて、曲線になると思います。(正弦波に近い曲線)この得られた曲線から極座標変換して、xy平面上に円を描きたいのですがどのようにすればいいのでしょうか?教えて下さい。

  • 各座標軸との交点についての質問

    座標の問題についての質問 平面x+4y+8z=6について (1)各座標軸との交点の座標を求めよ 解答(6,0,0)(0,3/2,0),(0,0,3/4) (2)原点から平面上の点までの距離の最小値を求めよ 解答2/3 (3)この平面のx≧0、y≧0、z≧0である部分の面積を求めよ 解答81/16 という問題が答えは分かるのですがいまいち解き方など分からないところがあります どなたかお教えくださるとありがたいです

  • 座標

    VC++のMFCで図形を書いているのですが、MFCでは基本画面の左上が原点になり→向きがxの正で↓向きがyの正ですがこれだと-の座標が表示できないというのもあり、改善の方法として2つありますが今回は図形を表示したいだけですので全ての座標に+100をする方法をとりました。 (例:(-20,-20)→(80,80)) しかし講師の方はy座標の符号を変える必要があると言いました。この点がいまいち理解しずらいのですが普通に100足すだけでも移動できてると思うのですがどうなのでしょうか。