Quaternionだと回転速度の減衰がうまくできなかったからこんなのを作った

こんにちは。ヤマヤタケシです。
Quaternionだと回転速度の減衰がうまくできなかったからこんなのを作りました。
カッコつけて、immutableにしました。

using UnityEngine;

public struct AngleAxis
{
    public readonly float angle;//degree
    public readonly Vector3 v;

    public static AngleAxis identity = new AngleAxis(0.0f, Vector3.zero);

    public AngleAxis(Quaternion q)
    {
        angle = Mathf.Acos(q.w) * Mathf.Rad2Deg;
        v = new Vector3(q.x, q.y, q.z);
    }

    public AngleAxis(float angle, Vector3 v)
    {
        this.angle = angle;
        this.v = v;
    }

    public Quaternion Quaternion
    {
        get
        {
            return Quaternion.AngleAxis(angle, v);
        }
    }

    public AngleAxis Clamp(float min, float max)
    {
        return new AngleAxis(Mathf.Clamp(angle, min, max), v);
    }

    public AngleAxis Scale(float ratio)
    {
        return new AngleAxis(angle * ratio, v);
    }

}

そんじゃまた。

コメントを残す

メールアドレスが公開されることはありません。