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); }
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()); }