その小円が緯線となるように座標を変換したときの極が求める点です。
方法はいくつかあります。
その小円が緯線となるように座標を変換して(回して)、極に逆の変換をする方法。
これがいちばん直感的でストレートな方法だと思います。
あとは3点からの距離が等しい点を導く方法。
一旦別の座標系に変換したほうが計算しやすいでしょう。
XYZの直交座標系なら何も考えず、機械的に計算できます。
▽2
●
ita ●35ポイント ベストアンサー |
3点の緯度、経度をAi,Biとし、これをラジアンにしてからXYZ座標を出します。
簡単のために地球の半径=1と仮定
Ai=Ai/180*π
Bi=Bi/180*π
Xi=cos(Bi)*cos(Ai)
Yi=sin(Bi)*cos(Ai)
Zi=sin(Ai)
次に三点を通る面の法線を外積により計算
X21=X2-X1
Y21=Y2-Y1
Z21=Z2-Z1
X31=X3-X1
Y32=Y3-Y1
Z32=Z3-Z1
NX= Y32*Z21 - Z32*Y21
NY= Z32*X21 - X32*Z21
NZ= X32*Y21 - Y32*X21
これを長さ1に規格化
l=sqrt(NX*NX+NY*NY+NZ*NZ)
NX=NX/l
NY=NY/l
NZ=NZ/l
これが求める点の座標。これを緯度経度に変換
緯度=asin(NZ)*180/π
経度=atan2(NX,NY)*180/π
C言語だとatan2(NY,NX)と順番が逆になるので注意です。
いつもありがとうございます。同じ質問を扱ったQ&Aサイトを見つけたのですが、いただいた回答と外積の計算の部分が微妙に異なります。
http://mathforum.org/library/drmath/view/68373.html
引く数と引かれる数が入れ替わっているので、外積の計算の結果を比べてみますと、ちょうど数字は同じで符号が逆になっています。どちらが正しいかご確認いただけるでしょうか。
追記:求める軸が球面と交わる点は球の反対側にもう一つ二点ありますが、それぞれの解法はそれぞれのお互いの反対側の点を示しているようですね。小円に近いほうの点を示しているのは上記のサイトのほうのようなのですが...(残念ながら)。わたしの計算間違いでしょうか。