LoginSignup
0
1

More than 1 year has passed since last update.

Vector2を回転させる

Last updated at Posted at 2021-11-02

概要

平面上の2次元ベクトルを回転させたいときのやり方についてのメモ。
Quaternionを使う方法もあるけど2次元の場合はもっと簡単な方法がある。

結論

複素数(Complex)を掛け算するだけでよい

用例

Complex構造体は内容的にはVector2と同じものである。
https://docs.microsoft.com/ja-jp/dotnet/api/system.numerics.complex?view=net-5.0
complexインスタンスにおけるRealがVector2のX、ImaginaryがYと考えて問題ない。
complexクラスには * のオーバーロードが実装されており、complex同士を掛けると掛けた分だけcomplexの各要素が反時計回りに回転するという性質がある。
なので、
・まず回転させたいVector2からComplexを作成する
・回転させたい角度のComplexを作成する
・上記2つのcomplexを掛ける
ことで目的のVector2を得られる。

下記がサンプルコード。Unityで利用するためMathfを利用しているが、特にUnityだけで利用するものでもないため適宜Mathなどに読み替えて利用すること。

    /// <summary>
    /// Vector2を回転させる
    /// </summary>
    /// <param name="from">回転させたいVector2</param>
    /// <param name="angle">回転させる角度</param>
    /// <returns></returns>
    public static Vector2 Rotate(Vector2 from, float angle)
    {
        Complex a = new Complex(from.x, from.y);
        float cos = Mathf.Cos(Mathf.Deg2Rad * angle);
        float sin = Mathf.Sin(Mathf.Deg2Rad * angle);
        Complex b = new Complex(cos, sin);
        Complex result = a * b;
        return new Vector2((float) result.Real, (float) result.Imaginary);
    }

以上。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1