2008年05月03日

太陽の方角

太陽の方角はSIM基準であるためか
アバターから見た太陽の方向とは異なります。
たとえばAtanで太陽の方角を出して、SIM基準では北東位置だとしても
アバターからは真東に見えます。
この補正をどうにかしようと、三角関数をいじってみましたがうまくいかずw
誰か、アバター位置から見た太陽の方角の求め方を教えてください



Posted by トシ  at 10:32 │Comments(10)TrackBack(0)

この記事へのトラックバックURL

http://oshiete.slmame.com/t227295

この記事へのコメント
トシさん、こんにちは。

アバターから見た太陽の方角はSIMのどこにいようと、真東→真上→真西のどこかに見えます。
llGetSunDirection()のx値とz値から方向を算出すればいいのではないでしょうか。
(というか、Y値を0.0にすれば、太陽の位置の単位ベクトルになるはず)

ただしWorld > Environment Settings > Revert to Region Default以外に設定されていてSIMの時間帯とローカル環境の時間帯が違っていれば上の方法はダメです。
Posted by ささぴ at 2008年05月03日 11:42
なにげなく書いて、あとで間違いに気づいてしまう今日この頃・・・。

単位ベクトルにはならないですね。
アバターから見た太陽の方角のベクトルが分かる・・・ということで。
Posted by ささぴ at 2008年05月03日 11:59
>アバターから見た太陽の方角のベクトルが分かる
atanでは正確な方位はでません
Posted by トシトシ at 2008年05月03日 15:26
もっと言うと、日の出と日の入りのそれぞれの誤差は分かっています。
真南は当然誤差は0です。
なので、その式を解きたいのですが、私の頭では答えが出てきませんw
Posted by トシトシ at 2008年05月03日 15:34
トシさん、こんばんは。

トシさんのいう「正確な方位」が、どのような意味なのか分かりませんが、アバターから見た見かけ上の太陽の位置は、午前中なら真東ですし午後なら真西です。正午は真上です。
(午前とか午後というのは、正確な表現ではないですが・・・。llGetSunDirectionのX値が正なら午前、負なら午後、0なら正午という意味で)
太陽の方向は、それに高さを考慮すればいいわけで、ここでいう高さというのはアバターから見た太陽の高さの角度となり、llGetSunDirectionのXとZから角度を求めればよいのではないでしょうか。

「日の出と日の入りのそれぞれの誤差は」とありますが、何の何に対しての誤差なのか分かりませんが、llGetSunDirectionで取得した太陽の位置に誤差があるのでしょうか?
llGetSunDirectionで取得した値と、アバターから見えている太陽の位置の誤差というのであれば、先に書いたようにリージョン座標系のアバター位置を基準としたXとZの平面上に太陽が見えているわけですから、誤差を考慮する必要が無いと思います。

私の「アバター位置を基準としたXとZの平面上に太陽が見えている」という認識が違っているのでしたら、ぜんぜん回答になっていないですね。
Posted by ささぴ at 2008年05月03日 19:23
トシさん、初めまして。

> たとえばAtanで太陽の方角を出して、SIM基準では北東位置だとしても
> アバターからは真東に見えます。

 これは daytime(昼間)時に真東にある大きな太陽の事ですか?

 現在の太陽は、日の出から一度真上まで一気に昇ってから
 昼間の太陽が表示される様です。
 ですので、真上=昼間ではない様な気がします。
 トシさんは、太陽の角度は算出されているので角度をみて
 昼間かどうかを判定してはいかがですか?

> もっと言うと、日の出と日の入りのそれぞれの誤差は分かっています。

 llGetSunDirectionでZの値はマイナス(夜)を返してきても
 まだ陽が沈んでないということですよね?
Posted by asuka at 2008年05月04日 00:24
>アバター位置から見た太陽の方角の求め方を教えてください

SIMのどこにいようと、デフォルトの場合は西か東しかないですよね・・?もしかしてアバターの向いている方向を北として、その時の太陽の方角を知りたいんでしょうか?(日の出の時に西を向いていたら南と表示する等)

なんにしても、もうちょっと詳しい説明をお願いします。数学は苦手ですけどw
Posted by DI at 2008年05月04日 02:54
>llGetSunDirectionでZの値はマイナス(夜)を返してきても
>まだ陽が沈んでないということですよね?
具体的には日の出位置は、アバターから見ると真東ですが、 llGetSunDirectionの値から算出すると北東です。

>しかしてアバターの向いている方向を北として、その時の太陽の方角を知りたいんでしょうか?
そうですw
アバターの向きを基準として、太陽の角度を知りたいのです。
Posted by hirohiro at 2008年05月04日 03:06
>現在の太陽は、日の出から一度真上まで一気に昇ってから
それは見かけ上の太陽ですか?
llGetSunDirectionで得られるz座標は、徐々に上がっていきます。
Posted by トシトシ at 2008年05月04日 03:30
llGetSunDirectionから返ってくるデータの角度変換が
終わっているのでしたら…

東西南北をX,Yの二次元にしてatanで角度を算出するのでは駄目ですか?

北~南を-1~1、東から西を1~-1としてatanに渡して
返値がマイナスなら360を加算すれば2次元の角度になりませんか?
東から時計回りで南が90度、西が180度、北が270度になると思います。
後は、アバターの方角と併せて算出すれば問題ないのでは??

ただ、X,Yともに0の場合は見失う事になりますけど…。
Posted by asuka at 2008年05月04日 04:20