■
2つのベクトルで定義される面に対して垂直なベクトル - 外積 - cross
法線的な - 鏡の面の法線を外積として表す
鏡の法線と入射ベクトルの内積をとる。- 内積 - 仕事量 - スカラー値 - ベクトルではない
三次元反射ベクトル
ofVec3f v = -2*(light.dot(norm))*norm+light;
鏡の向き - 法線で表す - norm
鏡の向きはxとyとで回転(altitude, azimuth)
正面を向いている時(0, 0)
モーターを基準に考えると0, 0の時のベクトルは
ofVec3f(0, 1, 0)
unit vector。
設定値としては
・ユニットの設置向き/場所
x, y, zで回転
latitude, longitude
テスト用にマウスの位置で回転
ミラー中央から太陽に向く光の線
ミラー中央からのミラー法線
ミラー中央からの反射光
画面ではユニットの回転
グローバルグリッドを表示
太陽の向きは北向き基準
時差
ofVec3f v = -2*(light.dot(norm))*norm+light;
単純にこれを逆算しようと思っても、dot(内積)がはいっているのでできないな。
考え方として
・光源
・反射した先
が決まっていて
・鏡の角度
がもとめるべき解
太陽から鏡
反射する先から鏡
の2つベクトルの成す角度の間がとれれば良い。
2次元で考えると、、、
座標系の混乱を整理してクリアにする。
世界を上方向から見た時
上が北
右が東
太陽は東から登って西に沈む
N-E-S-W
北-東-南-西
0-90-180-270
左手系の座標と右手系の座標
一般的な数学空間では右手系の座標
方位では
右手系では東を基準方位とし反時計回りを正の角度とする。左手系では北を基準方位とし時計回りを正の角度とする。
http://ja.wikipedia.org/wiki/%E6%96%B9%E4%BD%8D%E8%A7%92
今、拾ってきて使っているコードは左手系南基準
高さについても、左手系なので、右手系に変換
右手系東基準で行こう