public static AngularTransition Create(quaternion displacement, quaternion velocity, float durationInSeconds, float inverseDeltaTime) { float angle; var axis = Missing.axisAngle(displacement, out angle); if (angle < 0.0f) { angle = -angle; axis = -axis; velocity = Missing.negate(velocity); } angle %= 2.0f * math.PI; var x0 = angle; var x1 = 2.0f * math.atan( math.dot(velocity.value.xyz, axis) / velocity.value.w); var v0 = (x0 - x1) * inverseDeltaTime; v0 = math.min(v0, 0.0f); var transition = ScalarTransition.Create(x0, v0, durationInSeconds); return(new AngularTransition { t = 0.0f, axis = axis, transition = transition }); }
public static LinearTransition Create(float3 displacement, float3 velocity, float durationInSeconds, float inverseDeltaTime) { var axis = math.normalizesafe(displacement); var x0 = math.length(displacement); var x1 = math.length(math.dot(axis, velocity)); var v0 = (x0 - x1) * inverseDeltaTime; v0 = math.min(v0, 0.0f); var transition = ScalarTransition.Create(x0, v0, durationInSeconds); return(new LinearTransition { t = 0.0f, axis = axis, transition = transition }); }