public static FPQuaternion LerpUnclamped(FPQuaternion a, FPQuaternion b, Fix64 t) { FPQuaternion result = FPQuaternion.Multiply(a, (1 - t)) + FPQuaternion.Multiply(b, t); result.Normalize(); return(result); }
public static FPQuaternion FromToRotation(FPVector fromVector, FPVector toVector) { FPVector w = FPVector.Cross(fromVector, toVector); FPQuaternion q = new FPQuaternion(w.x, w.y, w.z, FPVector.Dot(fromVector, toVector)); q.w += Fix64.Sqrt(fromVector.sqrMagnitude * toVector.sqrMagnitude); q.Normalize(); return(q); }
public void Rotate(FPVector eulerAngles, Space relativeTo) { FPQuaternion result = FPQuaternion.identity; if (relativeTo == Space.Self) { result = this.rotation * FPQuaternion.Euler(eulerAngles); } else { result = FPQuaternion.Euler(eulerAngles) * this.rotation; } result.Normalize(); this.rotation = result; }
public void Rotate(FPVector axis, Fix64 angle, Space relativeTo) { FPQuaternion result = FPQuaternion.identity; if (relativeTo == Space.Self) { result = this.rotation * FPQuaternion.AngleAxis(angle, axis); } else { result = FPQuaternion.AngleAxis(angle, axis) * this.rotation; } result.Normalize(); this.rotation = result; }