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

例えば、半径 R=1 の地球儀を考え、下記の定義を行う事によって座標系を定義したとします。

[座標の定義]
+ O(0, 0, 0) ... 地球儀の中心
+ X(1, 0, 0) ... 北緯 90°の点
+ Y(0, 1, 0) ... 緯度: 0, 経度: (西経)90 の点
+ Z(0, 0, 1) ... 緯度: 0, 経度: 0 の点

--
この時、地球儀表面上の点 P(x, y, z) が与えられた場合、その緯度(a)と経度(b)を求める方法を教えて下さい。

--
あと、この(a),(b)の値(量)は緯度と経度の定義が変わらなければ、唯一の値になると思うのですが、例えば緯度と経度の定義が下記のように反対になったとき(変わったとき)は、当然 (a),(b)の値も変わると思います。

その違いはイメージとしては判るのですが、うまく他人に説明できません。どなたかうまい説明の方法をご教示いただけないでしょうか。

[反対の定義]
通常の定義では、
(1) 経度を表す(地球儀上の)線はどの線を採っても 北緯90°(1, 0, 0) と 南緯90°(-1, 0, 0) のニ点を通ります。よって、どの経度の線同士を採っても互いに交叉します。
(2) 一方、緯度を表す線は、その線同士一切交わりません。
例えば、上記(1)(2)の特徴を反転して、緯度は必ず (0, 1, 0) と (0, -1, 0) のニ点を通り、経度は必ず他の(経度の)線と交わらないとする。

--
よろしくお願いします。

A 回答 (5件)

何かの課題でしょうか?そうでしたら規約で禁止されています。

自分で考えましょう。


ベクトルとして考えるといいかと思います。例えば2つのベクトルP(x, y, z)とX(1, 0, 0)のなす角を計算すれば北緯が求まるかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

> 何かの課題でしょうか?
いいえ違います。

実は計算はできています。ですが恥ずかしい話なのですが、それが本当に正しいかどうかが検証できません。
それで、皆様からもしも他の回答が得られれば、それで検証しようかと思っていました。

> ベクトルとして考えるといいかと思います。例えば2つのベクトルP(x, y, z)とX(1, 0, 0)のなす角を計算すれば北緯が求まるかと思います。

そうですね。OPベクトルと OXベクトルでできる勝手な平面上の角度は簡単に求まりますが、それを先の質問に記述していたような、緯度と経度に割り振った際の角度にしたかった訳です。

お礼日時:2005/06/29 12:11

地球儀表面上の点 P(x, y, z)を与えて、その緯度(a)と経度(b)を求める方法とのことですが、


当然ですが、x, y, z はx^2+y^2+z^2=1を満足させるように与えなくてはなりません。(地中とか空中の話なら別ですが)
現実にそういうふうに与える必要性があるのでしょうか?
緯度(a)と経度(b)を与えて、P(x, y, z)を求めるのが通常だと思います。その場合は
北緯a、西経b とすると
x=sin a
y=(cos b)(cos a)
z=(sin b)(cos a)
になりますよね。
どうしても必要ならこの3式をa,bについて解けばよいのでしょうけれど、
面倒そうだし、実際できるのかどうかわかりません。
[反対の定義]については、地球が北極と南極を結んだ線を軸に自転している以上、必要性が理解できません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
実は地球儀は単なる例えでした。

本当はあるロボットのアームを制御しようとしてたのですが、そのロボットのアームは、先の例の X軸心延長上に 経度(b)の角度(量)回転するモータ(B)が付いており、そのモータ(B)で回転する台の上に、緯度(a)の角度(量)回転するモータ(A)がモータ(B)の軸心とは常に直交する方向で付いています。そしてある1点 O を中心に(理論上は) 360°全球的に腕(の先)を触れます。

で、腕(の先)にある P(x, y, z) を定め、そのx, y, z が指示された時の a, b を求めようとした訳です。

--
> 北緯a、西経b とすると
> x=sin a
> y=(cos b)(cos a)
> z=(sin b)(cos a)

の件はまだ確認していません。また確認できれば報告させてもらいます。
--
> [反対の定義]については、地球が北極と南極を結んだ線を軸に自転している以上、必要性が理解できません。

ははは。確かに本当に地球儀に関する事であれば仰せのとおりですね。

ですが、上記した通り実際はロボットのアームです。で、この反対の件は、ロボットのアームが上記したモータの関係が逆のものもあって、「どちらでも ある P を指すには a, b は固有の値でいけるのでは??」って問題が違うのは判ってても中々うまく説明できないのです。

それで、どなたかこの辺をビシッと説明できるご回答をお持ちでないかな? と思っていたわけです。
## ちょっと、例が飛躍しすぎてかえって良くなかったも知れませんでした。

なお、引き続き、この辺りをビシッと説明できるご回答があればお待ちしておりますので、よろしくお願いします。

お礼日時:2005/06/30 14:45

面白そうな問題なので、ちょっと解いてみました。



まず北極点が点 X=(1,0,0)、南極点が点 X'=(-1,0,0)ですので、緯度 a は (y,z) に関わらず一定になるはずです。したがって a=a(x) と書き表すことが出来ます。したがって、ある点 P=(x,y,z) の緯度は a=∠POX から cos(a)=x となることから a=arccos(x) になります。

経度は、地球を緯度線に垂直に切った時の切り口のなす角で定義されています。
赤道に水平に切った断面(円)を考え、その中心をO'とします。また球面上の y=0、z>=0 になる点を点 Q とすれば、点 Q は経度0の点になります。この時 ∠PO'Q が経度 b になります。したがって
√(y^2+z^2)cos(b)=z
が成り立ちます。これを変形して
b=arccos(z/(√(y^2+z^2))
になります。

まとめれば、次のようになります。
緯度:a = arccos(x)
経度:b=arccos(z/(√(y^2+z^2))


> [反対の定義]
緯度と経度の定義を逆にするという意味だと思いますが、上記のxとyを入れ替えるのと全く同じ事になります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

せっかく式まで導出頂いてて申し訳ないのですが、ご教示頂いた
> 緯度:a = arccos(x)
> 経度:b=arccos(z/(√(y^2+z^2))

では、残念ながら私が考えていた結果は求まりませんでした。

もしかしたら、私の単なる勘違いかも知れませんが、疑問だった点を記しておきます。
+ a = arccos(x) では、北緯90°が 0°になってしまいませんか?
+ arccos() 単体だけでは 0~180°の値しか求まらないと思うのですが如何でしょうか?

お礼日時:2005/06/30 14:54

#2です


これを聞いたからといって私に満足のいく答えができると思っているわけではありませんがちょっと気になったので質問させてください。
地球儀の例で言うと、半径1とすると、P(x, y, z) が地表面であるかぎりx^2+y^2+z^2=1の関係がありますが、
ロボットアームの場合のPもこれと同様に、Oとの距離は常に一定なのですか?

なお、#2で書いた
>北緯a、西経b とすると
>x=sin a
>y=(cos b)(cos a)
>z=(sin b)(cos a)

北緯a、西経b とすると
x=sin a
y=(sin b)(cos a)
z=(cos b)(cos a)
の間違いでした。失礼しました。
また、aを負とすれば南緯方向になり、bを負とすれば東経方向になるのはいうまでもありません。

この回答への補足

> これを聞いたからといって私に満足のいく答えができると思っているわけではありませんがちょっと気になったので質問させてください。

いいえ。ご回答頂けなくても結構ですよ。振ったのは私ですから何なりと聞いてください。
==
> 地球儀の例で言うと、半径1とすると、P(x, y, z) が地表面であるかぎりx^2+y^2+z^2=1の関係がありますが、
ロボットアームの場合のPもこれと同様に、Oとの距離は常に一定なのですか?

アームの先には a=0°b=0°の時、丁度 先の例で言うところの O を基点に Z軸を方向に長さ m の棒が付いていると思ってください。それで、モータ(A)を駆動すると、O を中心に棒が奥に倒れたり、手前に倒れたりします。その状態で、モータ(B)を動かすと、X軸を中心に O を固定して倒れた棒が回転する訳です。

ということは、その棒の O とは反対側を P とすれば、その P は 球表面上を動作する事になると思います。また、この時 m を 1 にすれば、m = 1 = R となる訳ですね。

補足日時:2005/06/30 17:31
    • good
    • 0

#3です。



前回の回答に勘違いがあったので訂正します。
> + a = arccos(x) では、北緯90°が 0°になってしまいませんか?
> + arccos() 単体だけでは 0~180°の値しか求まらないと思うのですが如何でしょうか?
この二点については質問者の方の指摘は全く正しいです。正しくは
a = arcsin(x)
b = arcsin(y/√(y^2+z^2))
とすべきですね。これでしたらb=270°の時にも-90というように出ます。
尚、この式は#2の方の式を解いた物と完全に一致します。
    • good
    • 0

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