public override ASSPointF GetPointF(double t) { List <ASSPointF> tmp = new List <ASSPointF>(); while (tmp.Count < 10) { ASSPointF p = OriginalCurve.GetPointF(Common.RandomDouble(rnd, t - BlurRange, t + BlurRange)); if (p != null) { tmp.Add(p); } } ASSPointF pt = new ASSPointF { X = 0, Y = 0, T = t }; foreach (ASSPointF tmppt in tmp) { pt.X += tmppt.X; pt.Y += tmppt.Y; } pt.X /= (double)tmp.Count; pt.Y /= (double)tmp.Count; return(pt); }
/// <summary> /// Compute specfied index key tangents. /// </summary> /// <param name="idx"></param> public void ComputeTangents(int keyIndex) { if (keyIndex < 0 || keyIndex > keys.Count || keyIndex > Int32.MaxValue - 2) { throw new ArgumentOutOfRangeException("keyIndex"); } // Compute neighbors tangents too. for (int i = keyIndex - 1; i < keyIndex + 2; ++i) { if (i >= 0 && i < keys.Count) { EditCurveKey key = keys[i]; MarkModify(key); float tangentInValue = key.TangentIn; float tangentOutValue = key.TangentOut; CurveTangent tangentIn = Convert(key.TangentInType); CurveTangent tangentOut = Convert(key.TangentOutType); OriginalCurve.ComputeTangent(i, tangentIn, tangentOut); if (Single.IsNaN(key.TangentIn)) { key.TangentIn = 0.0f; } if (Single.IsNaN(key.TangentOut)) { key.TangentOut = 0.0f; } // Restore original value if EditCurveTanget is fixed. if (key.TangentInType == EditCurveTangent.Fixed) { key.TangentIn = tangentInValue; } if (key.TangentOutType == EditCurveTangent.Fixed) { key.TangentOut = tangentOutValue; } } } }
/// <summary> /// Evaluate this curve at given position. /// </summary> /// <param name="position"></param> /// <returns></returns> public float Evaluate(float position) { return(OriginalCurve.Evaluate(position)); }