using System; namespace MyParking.Shared { /// /// 提供与具体业务和坐标系无关的基础插值功能。 /// public static class InterpolationMath { /// /// 将插值比例限制到[0, 1]闭区间。 /// public static double Clamp01(double value) { EnsureFinite(value, nameof(value)); if (value <= 0.0) { return 0.0; } if (value >= 1.0) { return 1.0; } return value; } /// /// 对两个标量执行线性插值。 /// ratio为0时返回start,ratio为1时返回end;本方法不限制ratio, /// 因此也支持区间外的线性外插。 /// public static double Lerp( double start, double end, double ratio) { EnsureFinite(start, nameof(start)); EnsureFinite(end, nameof(end)); EnsureFinite(ratio, nameof(ratio)); return start + ratio * (end - start); } /// /// 验证输入是可用于插值计算的有限数值。 /// private static void EnsureFinite(double value, string parameterName) { if (double.IsNaN(value) || double.IsInfinity(value)) { throw new ArgumentOutOfRangeException( parameterName, "插值参数必须是有限数值。"); } } } }