ベクトルから角度を求める
解説/アルゴリズム
Math.atan(vec.y / vec.x); // -90°~+90°の範囲
Math.atan2(vec.y, vec.x); // -180°~+180°の範囲
ベクトルの y を x で割ることで傾き、つまり tanθ を求めて、tan の逆関数に渡すことで θ(ラジアン)を求める。
atan は範囲が 180° しかないので、基本的には atan2 を使用することになる。
atan2 の引数は tanθ ではなく、計算前のベクトルを (y, x) の順番で渡す。
コード例
function heading(v: Vector): number {
return Math.atan2(v.y, v.x);
}
const v: Vector = { x: 5, y: 5 };
console.log(heading(v)); // 0.7853981633974483
p5.js
import * as p5 from "p5";
new p5((p: p5) => {
p.setup = () => {
const v = p.createVector(5, 5);
console.log(v.heading()); // 0.7853981633974483
};
});