public static void RotateAround(ref Vector3 vector, ref Vector3 axis, float angle, out Vector3 result) { // rotate into world space var quaternion = Quaternion.FromRotationAxis(axis, 0); Quaternion.Conjugate(ref quaternion, out quaternion); Vector3.Transform(ref vector, ref quaternion, out result); // rotate back to vector space Quaternion.FromRotationAxis(ref axis, angle, out quaternion); Vector3.Transform(ref result, ref quaternion, out result); }
public Vector3 RotateAround(Vector3 axis, float angle) { // rotate into world space var quaternion = Quaternion.FromRotationAxis(axis, 0); Quaternion.Conjugate(ref quaternion, out quaternion); var worldSpaceVector = this.Transform(quaternion); // rotate back to vector space Quaternion.FromRotationAxis(ref axis, angle, out quaternion); Vector3.Transform(ref worldSpaceVector, ref quaternion, out worldSpaceVector); return(worldSpaceVector); }
public static void Invert(ref RigidTransform3 transform, out RigidTransform3 result) { Quaternion.Conjugate(ref transform.Orientation, out result.Orientation); Vector3.Transform(ref transform.Position, ref result.Orientation, out result.Position); result.Position = -result.Position; }
public static void TransformInversed(ref Vector3 vector, ref RigidTransform3 transform, out Vector3 result) { result = vector - transform.Position; Quaternion.Conjugate(ref transform.Orientation, out transform.Orientation); Vector3.Transform(ref vector, ref transform.Orientation, out result); }