緯度経度で表される球体の表面上の三点があります。球体の中心と、その三点を通る小円の中心を通る線(小円の中心を通る球体の軸)が球面と交わる点を緯度経度で求める方法を教えてください。小円に近いほうの点だけで結構です。

回答の条件
  • 1人2回まで
  • 登録:2009/09/05 10:44:31
  • 終了:2009/09/12 10:45:02

ベストアンサー

id:ita No.2

ita回答回数204ベストアンサー獲得回数482009/09/06 09:08:48

ポイント35pt

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)と順番が逆になるので注意です。

id:spin6536

いつもありがとうございます。同じ質問を扱ったQ&Aサイトを見つけたのですが、いただいた回答と外積の計算の部分が微妙に異なります。

http://mathforum.org/library/drmath/view/68373.html

引く数と引かれる数が入れ替わっているので、外積の計算の結果を比べてみますと、ちょうど数字は同じで符号が逆になっています。どちらが正しいかご確認いただけるでしょうか。

追記:求める軸が球面と交わる点は球の反対側にもう一つ二点ありますが、それぞれの解法はそれぞれのお互いの反対側の点を示しているようですね。小円に近いほうの点を示しているのは上記のサイトのほうのようなのですが...(残念ながら)。わたしの計算間違いでしょうか。

2009/09/08 07:58:47

その他の回答(1件)

id:a_ki_su_te_no No.1

a_ki_su_te_no回答回数8ベストアンサー獲得回数12009/09/05 23:06:31

ポイント35pt

その小円が緯線となるように座標を変換したときの極が求める点です。


方法はいくつかあります。

その小円が緯線となるように座標を変換して(回して)、極に逆の変換をする方法。

これがいちばん直感的でストレートな方法だと思います。


あとは3点からの距離が等しい点を導く方法。

一旦別の座標系に変換したほうが計算しやすいでしょう。

XYZの直交座標系なら何も考えず、機械的に計算できます。

id:ita No.2

ita回答回数204ベストアンサー獲得回数482009/09/06 09:08:48ここでベストアンサー

ポイント35pt

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)と順番が逆になるので注意です。

id:spin6536

いつもありがとうございます。同じ質問を扱ったQ&Aサイトを見つけたのですが、いただいた回答と外積の計算の部分が微妙に異なります。

http://mathforum.org/library/drmath/view/68373.html

引く数と引かれる数が入れ替わっているので、外積の計算の結果を比べてみますと、ちょうど数字は同じで符号が逆になっています。どちらが正しいかご確認いただけるでしょうか。

追記:求める軸が球面と交わる点は球の反対側にもう一つ二点ありますが、それぞれの解法はそれぞれのお互いの反対側の点を示しているようですね。小円に近いほうの点を示しているのは上記のサイトのほうのようなのですが...(残念ながら)。わたしの計算間違いでしょうか。

2009/09/08 07:58:47
  • id:tdoi
    球体の中心と、その三点を通る小円が存在しない場合があると思うのですが。
    そもそも、任意の3点を通る円は存在しない場合があります。その上で中心を通るというのは、かなり制限された状態だと思いますが、そういう状況下での話ですか?
  • id:spin6536
    球体の中心は小円に含まれる必要はありません。質問の文章が分かりにくくて申し訳ありません。

    球体の中心を起点として、求めたい小円(三点が作る円)の中心に向かって放射状に伸びる線が球面と交わる点を意図しています。



    > 任意の3点を通る円は存在しない場合があります。

    任意の三点が作る三角形を考えて、その外接円がその任意の三点を通る小円になると思うのですが、間違っていますでしょうか?
  • id:Hyperion64
    3点のつくる平面上で、その三角形の外心および三角形の法線ベクトルを出したうえで、
    その外心を通る法線の延長と与えられた球面の交点を出す必要があると思います。
    やはり、一般には三角形の法線は球の中心を通らないですね。
  • id:tdoi
    失礼しました。

    > 任意の三点が作る三角形を考えて、その外接円がその任意の三点を通る小円になると思うのですが、間違っていますでしょうか?

    これは、僕の間違いでした。すいません。
    色々とごちゃごちゃ考えてしまってました。
  • id:ita
    三点をABC,面ABCに垂直で球の中心を通る線をONとします。点Nは球面上にある点。
    ONは辺AB,BC,CAどれとも垂直。
    ON・AB=0 (・はベクトルの内積)より
    ON・(OB-OA)=0 すなわち ON・OA = ON・OB

    点NとAの距離の二乗を計算すると
    (OA-ON)^2 = OA^2 +ON^2 +2 OA・ON = 1+1+2 2 OA・ON
    同様に
    (OB-ON)^2 = 1+1+2 2 OB・ON

    したがってON・OA = ON・OB のとき (OA-ON)^2=(OB-ON)^2
    つまり|NA|=|NB|。 同様な計算で |NA|=|NB|=|NC|が示せる。

    線ONと三角形の交点N'についても同様な計算で
    |N'A|=|N'B|=|N'C|が示せる。したがってONはABCの外心を通りかつABCの法線。
  • id:spin6536
    質問者です。またまた同様の質問をしました。
    http://q.hatena.ne.jp/1252537877
    よろしければご援助ください。
  • id:ita
    外積がどっちを向くのかは3点の位置関係や順番でも変わってくるので、
    まず計算して例えば簡単に計算できる3点の重心方向との内積を計算し
    マイナスになったら反対側を採用するなどすればいいと思います。
  • id:ita
    たとえば、つねにAからみてBがCより左にある、とかいう感じに位置関係を限定できれば判定はいりませんが、
    限定するためにごちゃごちゃ判定するようなら最後に出てきたベクトルを一回の判定で反転するORしない
    としたほうが簡単です。
  • id:spin6536
    itaさん

    いつもお世話になっています。
    コメントでの補足ありがとうございます。計算結果はステレオネットで片方の半球にまとめようと思うので、対極が結果としてでてきても問題ありませんでした。お手数をおかけしました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません