アプリ版:「スタンプのみでお礼する」機能のリリースについて

地球上の2点の緯度経度が与えられて、その2点を通る大円(地球中心を円の中心とした円軌道)を通る線(円周の一部)を100等分した点の緯度経度を算出するアルゴリズムを教えていただきたいのですが。
地球は理想的な球体でいいです。
考えたらできそうですが、定番アルゴリズムのようなものがあるだろうと思ったのでお尋ねしました。最終的にはプログラム化したいのですが。よろしくお願いします。

A 回答 (4件)

極座標(r、Θ)を用いればよい。


この場合rは無視できるからΘだけを考えれば済む。
そののち緯度経度に変換すればよい。
    • good
    • 0

アルゴリズムを考えるよりは、計算式を導き出す方が難しいのではないですか。

計算式がないとプログラム化はできないような気がします。

 アルゴリズムを教えてということなので、自分ならこうするという方法を回答します。式は組み立てていません。
1.経緯度の与えられた点を通る大円の式を作る(公式があるかも)
 大円と赤道の交わるところ(惑星軌道でいう昇交点)と交差角
 または、極の軌跡(点から90度離れている)を求める
2.2点から求めた1.で共通するものを探す。(2点を通る大円が確定)
3.求めた大円と昇交点を基準とする球面座標系で、2点の経度を求める
 緯度は0になるので不必要
4.経度差を100等分した各点の座標を地球経緯度に変換する(公式あり)
以上です
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
2点を通る大円を確定してその点上の座標を取得できるようにして、ほしい点の座標を(x,y,z)で求め、それを(経度、緯度)に変換すればよし、ということですね。一応、プログラムまで行きました。結果をみたところ、おかしいことはなかったのですが、私が作ったプログラムは三角関数系、その逆関数、外積などを使います。これらには定義域、値域があるし、外積は裏表の違いをどう判別したらいいか、という細かいところが不明なのですが、たまたま作ったものがちゃんと動作しました。西半球・南半球の点から東半球・北半球の点まで分割した点を表すことができました。関数の挙動を把握していないので結果オーライとなっていますが、どんな場合もOKかどうかは自信なしです。

お礼日時:2022/02/15 01:15

計算式まで踏み込まないといけないのかと考えていました。

外積という簡単なツールがあったのですね。行列を知らない世代には驚きです。

 定義外の範囲という点では他にもあります。たとえば経度の範囲(地球のようにEWであらすか天体のように0から1周までで表すかで変わってきます)があります。また、別問題として100等分する区間をどちら側にとるか(大阪から東京に行くのに名古屋経由で行くか博多経由で4万kmほど移動するかのように)も影響しそうです。

 定義区域外になりそうなところを考えてみます。
 区間の始点の座標から終点の座標で外積をとると、求める大円の極の座標が求まります。この時にzが負なら、等分する区間が逆(北極側から見て右回り)になっていることを念頭に置いて、極の座標を反転させます。ここから緯度経度に変換するときには三角関数の定義区域との関係は検討されると思います。
 この後、地球座標系と新しい大円を基準とする座標系相互の変換という手順になります。これになにかのツールやライブラリを利用したのなら、考慮済のはずなので特に問題なく結果が出ると思います。
 式を組み立てた場合でも、大円座標系での緯度は0度なので、北極側から見たときに、昇交点を基準とする地球座標系と大円座標系との象限が一致します。どちらかの経度から判断することができ単純だと思います。経度が0~180度までとそうでない場合で変わってきそうです。
 区間を等分するときも、経度の定義区域をまたいでいないかの検討は必要です。

 定義区域については、天体位置計算をするときに悩まされています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。考え方より、実際にコード化するところであれこれ確認する手間が作業を阻みます。この三角関数は-Pi~Piなのか0~Piなのかあるいはどんなものでも適宜piを使って世話してくれるかとかです。
その逆数とかもです。1つうまくいったからと言って汎用性がどの程度あるのか確認とれないという感じです。今、西南半球から東北半球まではできるようになりました。西半球ですが、東半球の経度に足して表現しています。南半球はマイナス北半球と表現しています。マイルールでほかの人が使うと思い違いになりそうです。

お礼日時:2022/02/20 12:19

「その2点を通る大円を通る線」ってのがよくわからんな. ふつう「大円」ってのは「球面の中心を通る平面と球面の交線」をいうはずだから, それを「通る」「線」とは何か, から決めないとダメじゃないかね.



というのが「文章を厳密に解釈した場合」の話.

単純に「2点 A, B の間を 100等分したい」ってのなら... 例えば「一方の点を北極点に移すような, 球の中心を通る直線を軸にする回転移動」を考えるかなぁ. 「北極点と (南極点でない) 任意の点の間の 100等分」は難しくなさそうだし.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。”大円を通る線”というのは言葉がおかしいですね。"大円の円周を通る2点"ですかね。あるいは大円を含む平面と球面の交線上の2点とかでしょうか。また、あるいは”球面上の2点で距離が最短になる”、でもいいかもですが。言葉足らずで”あの説明で分かってほしい”という怠惰を認めます。片方を北極点に移動して、その方法でもう片方も同様に移動すると、その経線が大円なので90-緯度が地心角(そういうらしいです)となり、それをRadで表示して地球の半径をかければOKですね。それも方法だと思います。この方法ではないですが、実際にプログラム化すると短いコードステップでした。三角関数の逆数で角度を出すときに定義域・値域が面倒な面がありました。処理系で違うんじゃないかとか確認しないといけないので。

お礼日時:2022/02/20 12:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!