/// <summary>
        /// クォータニオンからオイラー角に変換
        /// </summary>
        /// <param name="value">クォータニオン</param>
        /// <returns>オイラー角</returns>
        public static AxisOfRotation <float> QuaternionToEulerAngles(Quaternion <float> value)
        {
            AxisOfRotation <float> axis = new AxisOfRotation <float>();

            double x2z2 = Math.Pow(value.X, 2) - Math.Pow(value.Z, 2);
            double y2w2 = Math.Pow(value.Y, 2) - Math.Pow(value.W, 2);

            axis.Set(
                (float)Math.Atan2(2.0 * ((value.X * value.Y) + (value.Z * value.W)), x2z2 - y2w2),
                (float)Math.Asin(2.0 * ((value.X * value.Z) - (value.Y * value.W))),
                (float)Math.Atan2(2.0 * ((value.Y * value.Z) + (value.X * value.W)), x2z2 + y2w2)
                );

            return(axis);
        }
        /// <summary>
        /// オイラー角度からクォータニオンに変換
        /// </summary>
        /// <param name="value">オイラー角</param>
        /// <returns>クォータニオン</returns>
        public static Quaternion <float> EulerAnglesToQuaternion(AxisOfRotation <float> value)
        {
            Quaternion <float> axis     = new Quaternion <float>();
            double             cosRoll  = Math.Cos(value.Roll / 2.0);
            double             sinRoll  = Math.Sin(value.Roll / 2.0);
            double             cosPitch = Math.Cos(value.Pitch / 2.0);
            double             sinPitch = Math.Sin(value.Pitch / 2.0);
            double             cosYaw   = Math.Cos(value.Yaw / 2.0);
            double             sinYaw   = Math.Sin(value.Yaw / 2.0);

            axis.Set(
                (float)((cosRoll * cosPitch * cosYaw) + (sinRoll * sinPitch * sinYaw)),
                (float)((sinRoll * cosPitch * cosYaw) - (cosRoll * sinPitch * sinYaw)),
                (float)((cosRoll * sinPitch * cosYaw) + (sinRoll * cosPitch * sinYaw)),
                (float)((cosRoll * cosPitch * sinYaw) - (sinRoll * sinPitch * cosYaw))
                );
            Console.WriteLine("X : " + axis.X);
            Console.WriteLine("Y : " + axis.Y);
            Console.WriteLine("Z : " + axis.Z);
            Console.WriteLine("W : " + axis.W);
            return(axis);
        }