Example #1
0
        private List <PointString> DivOnePoly(int index)
        {
            PointString   poly = _roadPolys[index];
            List <double> divs = new List <double>();

            for (int i = 0; i < _roadPolys.Count; i++)
            {
                if (i != index)
                {
                    PointString poly2 = _roadPolys[i];
                    for (int j = 0; j < poly.Points.Count - 1; j++)
                    {
                        LineSeg seg = poly.GetSegAt(j);
                        for (int k = 0; k < poly2.Points.Count - 1; k++)
                        {
                            LineSeg          seg2 = poly2.GetSegAt(k);
                            LineSegIntersect intr = new LineSegIntersect(seg, seg2);
                            if (intr.Intersect())
                            {
                                divs.Add(j + intr.RatioAB);
                            }
                        }
                    }
                }
            }
            divs.Insert(0, 0);
            divs.Add(poly.Points.Count - 1);
            divs = divs.Distinct().OrderBy(x => x).ToList();
            List <PointString> result = new List <PointString>();

            for (int i = 0; i < divs.Count - 1; i++)
            {
                PointString subPoly = poly.GetSubPoly(divs[i], divs[i + 1]);
                if (subPoly.Length() > 0.1)  // subtle
                {
                    result.Add(subPoly);
                }
            }
            return(result);
        }
Example #2
0
        public static bool SegmentsIntersect(Point2D u0, Point2D u1, Point2D v0, Point2D v1)
        {
            LineSegIntersect intersect = new LineSegIntersect(new LineSeg(u0, u1), new LineSeg(v0, v1));

            return(intersect.Intersect());
        }