示例#1
0
        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);
        }