- ベストアンサー
プログラミングについて
こんばんわ。 今eclips(日食?)というプログラムソフトを使ってプログラムを作っているのですが、演習問題で - 地球を半径6400Kmの球として、その上の2点の緯度(-90度~90度)と経度(-180度~180度)を入力すると、二点間の地球表面に沿った最短距離を出力するプログラムを作れ。 という問題があったのですが何をどう使って作ればよいのか全く分からずお手上げ状態です。 エンジニアを目指している身なのでこれくらいは出来ないといけないなとは思うのですが・・・ ヒントで toRadians(d) toDegree(r) pow(y,x)などがありました。 いま挙げたものの他にもいくつか使うコマンドがあるかもしれませんが、どなたかこのプログラムの作り方が理解できるかたはいますでしょうか? よろしくお願いします。m(__)m
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
頭痛くなった。 もうだめぽ。(・_・;) 改造終了。 後はお願いします。 もうやりません。 (全然違う方法) 確認は、各自で行って下さい。^^; 半径は、6400 基準経度を、尋ねる。 基準経度は、それ。 「基準経度は、{それ}です。」と、表示。 度からラジアン。 「基準経度のラジアンは、{それ}です。」と、表示。 基準緯度を、尋ねる。 基準緯度は、それ。 「基準緯度は、{それ}です。」と、表示。 度からラジアン。 「基準緯度のラジアンは、{それ}です。」と、表示。 目標経度を、尋ねる。 目標経度は、それ。 「目標経度は、{それ}です。」と、表示。 度からラジアン。 「目標経度のラジアンは、{それ}です。」と、表示。 目標緯度を、尋ねる。 目標緯度は、それ。 「目標緯度は、{それ}です。」と、表示。 度からラジアン。 「目標緯度のラジアンは、{それ}です。」と、表示。 ’計算 座標1は、半径*コサイン(目標緯度)*コサイン(目標経度) 座標1を、表示。 座標2は、半径*コサイン(基準緯度)*サイン(目標経度) 座標2を、表示。 座標3は、半径*サイン(目標緯度) 座標3を、表示。 座標4は、半径*コサイン(基準緯度)*コサイン(基準経度) 座標4を、表示。 座標5は、半径*コサイン(目標緯度)*サイン(基準経度) 座標5を、表示。 座標6は、半径*サイン(基準緯度) 座標6を、表示。 結果1は、座標1*座標4+座標2*座標5+座標3*座標6 結果1を、表示。 結果2は、(結果1/(半径*半径)) 結果2を、表示。 結果3は、ARCCOS(結果2) 結果3を、表示。 距離は、(半径*結果3) 距離を、表示。 それは、距離。 「距離は、{それ}キロです。」と、表示。
その他の回答 (9)
- SortaNerd
- ベストアンサー率43% (1185/2748)
>No7 >西経、東経の経度θ1,θ2を与える時の経度を表す角度の範囲と混同されているようですね。 そのとおりですね。すいません、この部分は無視してください。
- oyaoya65
- ベストアンサー率48% (846/1728)
#2,3,6です。 A#7について少し誤った指摘をされていますので少し説明を補足しておきます。 >ただ、 >0°≦θ≦180° >は >-180°≦θ≦180° >の間違いかと思います。 間違いではないですね。 地球の中心から見たA-B間の中心角θは、負の値で言うのは適当ではないですね。負になった場合は絶対値をとって正のθとして求めるべきです。 そうでないとdが負になってでてきます。 2地点間の距離を-100kmというより100mというのが自然です。 西経、東経の経度θ1,θ2を与える時の経度を表す角度の範囲と混同されているようですね。 次の式のcosθからθを求める際 計算機ではcos^(-1)(=arccos)をとると、計算機で求められるθは -180°≦θ≦180°の範囲で求められるわけではありません。 -180°≦θ≦0° でなく 0°≦θ≦180° の範囲ででてきます。 大圏コースで地球の中心から見た2地点にいたる半径のなす中心角θを正の角として求めることを意味しています。実際の中心角は 180°-(-180°)=360° から数値的には360°は0°と同じですね。 また -180°-(180°)=-360°となりますが これも0°と同じですね。 cosやsinをとることでこれらの処理が自動的に処理されます。 >cosθ=cos(φ1)cos(φ2)cos(θ2-θ1)+sin(φ1)sin(φ2) >ただし、0°≦θ≦180°、緯度、経度の単位は度(°)です。 この式で与えるθ2とθ1はもちろん -180°≦θ1,θ2≦180° φ1とφ2は -90≦φ1,φ2≦90° で与えます。 2地点の中心角θを負として求めると 2地点間の距離dを >d=πrθ/180[km] から負の距離としても意味がないということです。 つまり、cosθから負の中心角θを求めても意味がないということです。 X=cosθからθ=arccos(X)は 0°≦θ≦180° の正の範囲ででてくるわけです。 例えばθ=-120[°]と出た場合 dの式に代入するとA-B間の距離が負に出てくるだけです。実際の2地点間の距離を負の-100mとは普通は言わないですね。 ですので、A-B間の中心角θを 0°≦θ≦180° の値で求める方が良いですね。 なお、現実に2地点間の中心角θが180°~360°になる場合がありますが、大圏コースが地球半周以上になり、反対側の距離の方が短くなりθ'=360°-θ を使います。(反対側でなく長い方の大圏コースの距離は地球一周は約40000kmから差し引いてやればでてきます。
お礼
こんばんわ。細かいところまで議論していただきありがとうございました。 とても、分かりやすかったです。 ありがとうございました。
- SortaNerd
- ベストアンサー率43% (1185/2748)
No1です。 No6さんと意見が合いましたね。私のも式を展開したら同じものがでてきました。面倒くさい式展開をやってくれているのでNo6さんの方の式でやるといいと思います。 ただ、 0°≦θ≦180° は -180°≦θ≦180° の間違いかと思います。東経西経ありますので。 同様にφは -90°≦φ≦90 でしょう。 ちょっと気になるのは pow(y,x) (yのx乗)をいつ使うのか。使うところがでてきそうにないんですが。
補足
書き込みありがとうございます。 実は質問させてもらった問題以外にも問題がありまして、もしかするとそちらの方につかう命令なのかもしれないです。ごめんなさい。
- oyaoya65
- ベストアンサー率48% (846/1728)
#2です。 すみません。訂正します。 >cosθ=cos(φ2-φ1)cos(θ2-θ1)---(1) >ただし、0°≦θ≦180°、緯度、経度の単位は度(°)です。 >d=πrθ/180[km] >となります。 >ここでr=6400[km]、θの単位は度(°)です。 上記の式をデータをいろいろ入れて大圏コースのグラフで描いて見たところどうも正しくないようなので(1)の式を以下の式で差し替えてください。 cosθ=cos(φ1)cos(φ2)cos(θ2-θ1)+sin(φ1)sin(φ2) なお、参考までに地球は真球ではなく、上下(北極-南極)方向に少し潰れていますので、赤道周りと北極、南極に近いほうを通る太極圏コースに幾分差が出ます。 また地球の子午線周りの一周の距離を40000万km丁度としてメートルの標準と定めていた時期もあるということで 地球の半径rは r=40000/(2π)≒6366.1977[Km] と言うことです。 これを6400[km]としていますので有効数字は2.5桁程度ですね。 通常、経度や緯度は 何度何分何秒 とありますので x°y'z"=x+(y+z/60)/60 [°] で度(°)単位にします。
- sqwe-ir
- ベストアンサー率23% (79/332)
うーん。 昔こさえた球面三角法のプログラムの1/5ぐらいになっちやった感じがする。 やっちゃっかかなこれ?(・○・;) 気のせいだといいけど。
- sqwe-ir
- ベストアンサー率23% (79/332)
暇だったんで、日本語プログラムひまわりで #2さんのだけプログラム化してみた。 時間があったら#1さんのも実現化する。 (数日後) 打ち込んでかくにんしてみよう! (絶対に!^0^) ここで「ひまわり」のキーで入手出来る。 それと、地点Aを基準に、地点Bとの角度差を求めるプログラムの方がいーよ。^^ ひまわりエディタにこれをコピーして貼り付けてランすれば良し。 半径は、64000 座標Xを、尋ねる。 座標Xは、それ。 「座標Xは、{それ}です。」と、表示。 度からラジアン。 「座標Xのラジアンは、{それ}です。」と、表示。 座標Yを、尋ねる。 座標Yは、それ。 「座標Yは、{それ}です。」と、表示。 度からラジアン。 座標Yは、それ。 「座標Yのラジアンは、{それ}です。」と、表示。 座標X2を、尋ねる。 座標X2は、それ。 「座標X2は、{それ}です。」と、表示。 度からラジアン。 座標X2は、それ。 「座標2のXラジアンは、{それ}です。」と、表示。 座標Y2を、尋ねる。 座標Y2は、それ。 「座標Y2は、{それ}です。」と、表示。 度からラジアン。 座標Y2は、それ。 「座標Xラジアンは、{それ}です。」と、表示。 計算角度は、コサイン(座標X-座標X2)*コサイン(座標Y-座標Y2) 計算角度は、それ。 「計算ラジアンは、{それ}です。」と、表示。 ラジアンから度。 「計算角度は、{それ}です。」と、表示。 それ=(3.14*半径*それ)/180 「距離は、{それ}です。」と、表示。
- 参考URL:
- http://www.vector.co.jp/
- oyaoya65
- ベストアンサー率48% (846/1728)
#2です。 訂正です。 >半径r=6400[km]とおくと >ここでr=64000[km]、θの単位は度(°)です。 r=6400[Km]が正しいですので下の方を r=6400[km] と訂正ください。 なお、 参考URLに日本、海外の主要都市の経度、緯度を表示し、かつ都市間の距離と方位角と方位を求めるサイトがありますのでA#2の計算式が正しいか確認してみてください。 (地球の半径としてr=6380kmを用いていますので、r=6400kmとした場合、多少誤差が出るかと思います。)
- oyaoya65
- ベストアンサー率48% (846/1728)
任意の2地点のA点とB点の(緯度,経度)をそれぞれ A点(φ1,θ1),B点(φ2,θ2) ただし、緯度と経度の角度の単位を°(度)とします。 半径r=6400[km]とおくと 最短距離dは大圏コース(A点とB点を通り、地球の中心を中心とする半径rの円の円周)上を通るコースに沿って測ったA点とB点を結ぶ短い方の距離となります。 cosθ=cos(φ2-φ1)cos(θ2-θ1) ただし、0°≦θ≦180°、緯度、経度の単位は度(°)です。 とすると d=πrθ/180[km] となります。 ここでr=64000[km]、θの単位は度(°)です。 となるかと思います。 多分あっていると思いますが、 2地点の緯度、経度を入れて、 ご自身で確認してみてください。
- SortaNerd
- ベストアンサー率43% (1185/2748)
極座標系から直交座標系に直し、内積からなす角のcosを求めればできそうですね。なんだかまどろっこしいやり方ですが。 A点(緯度φa , 経度θa) B点(緯度φb , 経度θb) 求める角ψ として、A点を基準に直交座標に直すと A(0,cosφa,sinφa) B(cosφb・sin(θb-θa),cosφb・cos(θb-θa),sinφb) となりますので、あとは xa・xb+ya・yb+za・zb=cosψ よりψ[ラジアン]を求め、半径を掛けてください。 ただ、もう少しうまい方法がありそうな気がします。
お礼
ご解答ありがとうございました。 丁寧にプログラムまで作っていただいて助かりました。 ほんと、ありがとうございました。