Unity中有相应的api,单纯只是学习一下原理
Quaternion ToQuaternion(Vector3 v)
{
Quaternion q = new Quaternion();
float yaw = v.z * 0.5f * Mathf.Deg2Rad;
float pitch = v.y * 0.5f * Mathf.Deg2Rad;
float roll = v.x * 0.5f * Mathf.Deg2Rad;
float cy = Mathf.Cos(yaw);
float sy = Mathf.Sin(yaw);
float cp = Mathf.Cos(pitch);
float sp = Mathf.Sin(pitch);
float cr = Mathf.Cos(roll);
float sr = Mathf.Sin(roll);
q.x = cy * cp * sr + sy * sp * cr;
q.y = cy * sp * cr - sy * cp * sr;
q.z = sy * cp * cr - cy * sp * sr;
q.w = cy * cp * cr + sy * sp * sr;
return q;
}
Vector3 ToEuler(Quaternion q)
{
Vector3 v = Vector3.zero;
v.y = Mathf.Atan2(2 * (q.x * q.z + q.w * q.y), (q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)) * Mathf.Rad2Deg;
v.x = Mathf.Asin(2 * (q.w * q.x - q.y * q.z)) * Mathf.Rad2Deg;
v.z = Mathf.Atan2(2 * (q.x * q.y + q.w * q.z), q.w * q.w + q.y * q.y - q.x * q.x - q.z * q.z) * Mathf.Rad2Deg;
if (v.x < 0) v.x += 360;
if (v.y < 0) v.y += 360;
if (v.z < 0) v.z += 360;
return v;
}