二つのベクトルがつくる角度を0~360度の範囲で求めたい。
内積関数に2つのベクトルを渡し、
返ってきた値を、アークコサイン関数に渡す。
そうすると角度が返ってくる。
このやり方で求めることが出来るのは、
右回り、左回り0~180度の範囲。
0~360度の範囲で角度を求めることが出来ない。
▼どちらも角度を求めると90度
▼左回りで0~360度の範囲で角度を求めたい場合
360から角度を引けばいい。
図で見るなら感覚的にわかるけど、
プログラミングで判別するためにはどうすればいいのか?
▼方法1
2つのベクトルの外積を求める事で判別できる。
ベクトルaからbが右回りだったら、
360度から角度を引けば良い。
右回りか、左回りか、どう判別するのか?
求めた外積のZ成分がプラスだったら左回り。
求めた外積のZ成分がマイナスだったら右回り。
実際に計算して確かめてみる。
↓外積の式
▼例1
ベクトルaからbが左回り。
ベクトルaとbの外積のZ成分がプラスになるか確かめる。
▼例2
ベクトルaからbが右回り。
ベクトルaとbの外積のZ成分がマイナスになるか確かめる。
確かにベクトルaからbが左回りの時は、外積のZ成分がプラスになり、
ベクトルaからbが右回りの時は、外積のZ成分がマイナスになる事が確認できた。
▼方法2
ベクトルbがどの象限にあるかで判別する。
ベクトルbが第二象限か、第三象限にあるなら、
ベクトルbのX成分はマイナスだと分かる。
ベクトルbが第三象限か、第四象限にあるなら、
ベクトルbのY成分はマイナスだと分かる。
●例1:ベクトルaからbまで左回りで0~360度を求めたい場合
ベクトルbのY成分がマイナスなら、360-角度にする。
ベクトルbのY成分がマイナスなら、360-角度にする。
ベクトルaは[1,0,0]。
ベクトルbは[-0.7,-0.7,0]。
●例2:ベクトルaからbまで右回りで0~360度を求めたい場合
ベクトルbのX成分がマイナスなら、360-角度にする。
ベクトルbのX成分がマイナスなら、360-角度にする。
ベクトルaは[0,1,0]。
ベクトルbは[-0.7,0.7,0]。
ピンバック: [Unreal Engine]Actorの角度を0~360の範囲で取得したい | NG録
2つのベクトルがxy平面にある例で説明されていますが、2つのベクトルがxy平面上になくても(z成分が0でなくても)、外積のz成分の符号で判断可能でしょうか?
わかりません。
2つのベクトルがxy平面上にない場合は、
行列と反転行列を使い、
XY平面でベクトルを捉えなおしてから計算する方法で
求めることが出来る気がします。
暇があれば試してみて、
うまくいけば記事にしたいと思います。