private static Func <Point, Vector, double> DistanceFunc(PolylineIntersector intersector) { Func <Point, Vector, double> result = (pnt, normal) => { var intersection = intersector.IntersectLine(pnt, normal); return(intersection != null ? intersection.Item2 : double.PositiveInfinity); }; return(result); }
public static double[] ComputeRadii(Point[] points, Vector[] normals, Point[] l1, Point[] l2) { Contract.Requires(points != null); Contract.Requires(normals != null); Contract.Requires(points.Length == normals.Length); Contract.Requires(l1 != null); Contract.Requires(l2 != null); Contract.Ensures(Contract.Result <double[]>() != null); Contract.Ensures(Contract.Result <double[]>().Length == points.Length); var intersector1 = new PolylineIntersector(l1); var intersector2 = new PolylineIntersector(l2); var radii = ComputeRadii( points, normals, (p, n) => IfNull(intersector1.IntersectLine(p, n), t => t.Item2, double.PositiveInfinity), (p, n) => IfNull(intersector2.IntersectLine(p, n), t => t.Item2, double.PositiveInfinity)); radii = AverageSmoothRadii(radii); return(radii); }