public static List <PolyLine> ToCache(PolyLine source, PolyLine target, double speed, IEasing easing, bool interpolateXAxis = true) { int steps = (int)(1 / speed); double p = speed; var cache = new List <PolyLine>(steps); for (int i = 0; i < steps; i++) { var clone = source.Clone(); var easeP = easing.Ease(p); To(clone, target, easeP, interpolateXAxis); p += speed; cache.Add(clone); } return(cache); }
public static void To(PolyLine source, PolyLine target, double progress, bool interpolateXAxis) { if (source.XValues.Count < target.XValues.Count) { InterpolatePolyLine( source.XValues.ToArray(), source.YValues.ToArray(), target.XValues.Count, out var xValues, out var yValues); source.XValues = xValues; source.YValues = yValues; } else if (source.XValues.Count > target.XValues.Count) { InterpolatePolyLine( target.XValues.ToArray(), target.YValues.ToArray(), source.XValues.Count, out var xValues, out var yValues); target.XValues = xValues; target.YValues = yValues; } for (int j = 0; j < source.XValues.Count; j++) { if (!interpolateXAxis) { source.XValues[j] = target.XValues[j]; } else { source.XValues[j] = Interpolate(source.XValues[j], target.XValues[j], progress); } source.YValues[j] = Interpolate(source.YValues[j], target.YValues[j], progress); } }