static void TestLengths(double del, int j, Curve curve, double eps, double pi, double li) { var lj = del*j; var pj = curve.GetParameterAtLength(lj); Assert.IsTrue(Math.Abs(curve.Trim(0, pj).Length - lj) < eps); var trimJi = curve.Trim(pj, pi); var lenJi = trimJi.Length; Assert.IsTrue(Math.Abs(lenJi - (li - lj)) < eps); }
/// <summary> /// /// </summary> /// <param name="length"></param> /// <returns></returns> public double GetParameterAtLength(double length) { return(curve.GetParameterAtLength(length)); }
public void LengthTestingForCurve() { #if GDI_DEBUG_VIEWER GraphViewerGdi.DisplayGeometryGraph.SetShowFunctions(); #endif var curve = new Curve(Getsegs()); var lengths = new List<double>(); foreach (var seg in curve.Segments) { lengths.Add(seg.Length); } var curveLen = curve.Length; double eps = Curve.LineSegmentThreshold*10; Assert.IsTrue(ApproximateComparer.Close(lengths.Sum(), curveLen)); var del = curveLen/1000; //special case for (int i = 745; i < 746; i++) { var li = i*del; var pi = curve.GetParameterAtLength(li); Assert.IsTrue(Math.Abs(curve.Trim(0, pi).Length - li) < eps); for (int j = 724; j < 725; j++) TestLengths(del, j, curve, eps, pi, li); } for (int i = 0; i < 1000; i++) { var li = i*del; var pi = curve.GetParameterAtLength(li); Assert.IsTrue(Math.Abs(curve.Trim(0, pi).Length - li) < eps); for (int j = 0; j < i; j++) TestLengths(del, j, curve, eps, pi, li); } }