2Dにおける三角関数を使わないベクトルの90度回転


計算なしで回転できる?!

符号反転と数値の入れ替えだけで90度、180度、270度回転ができる。

前提条件

x軸とy軸に対する値を持つベクトルがあること

// 今回使うクラス
class Vector2
{
    public float x = 0.0f;
    public float y = 0.0f;

    public Vector2(float _x, float _y)
    {
        x = _x;
        y = _y;
    }
}

90度回転の方法

yの値の符号を反転させて、そのうえでxとyの値を入れ替える。

    vector = new Vector2(1, 0);
    // 実践
    vector = new Vector2(-vector.y, vector.x);
    // vector.x = 0とvector.y = 1になる

↑で変換した値を確認すると90度回転した値になる。

信じられない人へ

Vector2(1, 0)だったからできたと思ったかもしれません。
では別でも試してみます。

    vector = new Vector2(3, 4);
    // 実践
    vector = new Vector2(-vector.y, vector.x);
    // vector.x = -4とvector.y = 3になる

一応図ものせておきます

180度回転の方法

xとyの値の符号を反転させる。

270度回転の方法

xの値の符号を反転させて、そのうえでxとyの値を入れ替える。

まとめ

三角関数を使用しなくても90度ずつの回転ができます。
テトリスやぷよぷよなどのパズルゲーム等にも使えるものですので、参考になればうれしいです。