Init( IList <double> t, IList <double> x ) { if (null == t) { throw new ArgumentNullException("t"); } if (null == x) { throw new ArgumentNullException("x"); } if (t.Count < 2) { throw new ArgumentOutOfRangeException("t"); } if (t.Count != x.Count) { throw new ArgumentException(Properties.Resources.ArgumentVectorsSameLengths); } double[] c = new double[4 * (t.Count - 1)]; double[] tt = new double[t.Count]; t.CopyTo(tt, 0); double[] xx = new double[x.Count]; x.CopyTo(xx, 0); Sorting.Sort(tt, xx); for (int i = 0, j = 0; i < tt.Length - 1; i++, j += 4) { c[j] = xx[i]; c[j + 1] = (xx[i + 1] - xx[i]) / (tt[i + 1] - tt[i]); c[j + 2] = 0; c[j + 3] = 0; } _spline.Init(tt, c); }
InitInternal( double[] t, double[] x, double[] d ) { double[] c = new double[4 * (t.Length - 1)]; for (int i = 0, j = 0; i < t.Length - 1; i++, j += 4) { double delta = t[i + 1] - t[i]; double delta2 = delta * delta; double delta3 = delta * delta2; c[j] = x[i]; c[j + 1] = d[i]; c[j + 2] = (3 * (x[i + 1] - x[i]) - 2 * d[i] * delta - d[i + 1] * delta) / delta2; c[j + 3] = (2 * (x[i] - x[i + 1]) + d[i] * delta + d[i + 1] * delta) / delta3; } _spline.Init(t, c); }