みさご解体新書

ベクトルから角度を求める

解説/アルゴリズム

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
  };
});

ソースコード

vector.ts / app.ts

関連記事