public static Vector3Double SmoothDamp(Vector3Double current, Vector3Double target, ref Vector3Double currentVelocity, double smoothTime, double maxSpeed, double deltaTime) { smoothTime = CGMath.Max(0.0001d, smoothTime); double num1 = 2d / smoothTime; double num2 = num1 * deltaTime; double num3 = (1.0d / (1.0d + num2 + 0.479999989271164d * num2 * num2 + 0.234999999403954d * num2 * num2 * num2)); Vector3Double vector = current - target; Vector3Double vector3_1 = target; double maxLength = maxSpeed * smoothTime; Vector3Double vector3_2 = Vector3Double.ClampMagnitude(vector, maxLength); target = current - vector3_2; Vector3Double vector3_3 = (currentVelocity + num1 * vector3_2) * deltaTime; currentVelocity = (currentVelocity - num1 * vector3_3) * num3; Vector3Double vector3_4 = target + (vector3_2 + vector3_3) * num3; if (!(Vector3Double.Dot(vector3_1 - current, vector3_4 - vector3_1) > 0.0)) { return(vector3_4); } vector3_4 = vector3_1; currentVelocity = (vector3_4 - vector3_1) / deltaTime; return(vector3_4); }
public static Vector3Double Max(Vector3Double lhs, Vector3Double rhs) { return(new Vector3Double(CGMath.Max(lhs.x, rhs.x), CGMath.Max(lhs.y, rhs.y), CGMath.Max(lhs.z, rhs.z))); }
public static double Angle(Vector3Double from, Vector3Double to) { return(CGMath.Acos(CGMath.Clamp(Vector3Double.Dot(from.normalized, to.normalized), -1d, 1d)) * 57.29578d); }
public static Vector3Double Lerp(Vector3Double from, Vector3Double to, double t) { t = CGMath.Clamp01(t); return(new Vector3Double(from.x + (to.x - from.x) * t, from.y + (to.y - from.y) * t, from.z + (to.z - from.z) * t)); }
public static Vector2Double Min(Vector2Double lhs, Vector2Double rhs) { return(new Vector2Double(CGMath.Min(lhs.x, rhs.x), CGMath.Min(lhs.y, rhs.y))); }