public static bool OneLineClose(LineSegment2D segment1, LineSegment2D segment2) { const double eps = 10.0; var d1 = DistanceHelper.LineToPointDistance2D(segment1.P1, segment1.P2, segment2.P1); var d2 = DistanceHelper.LineToPointDistance2D(segment1.P1, segment1.P2, segment2.P2); var d3 = DistanceHelper.LineToPointDistance2D(segment2.P1, segment2.P2, segment1.P1); var d4 = DistanceHelper.LineToPointDistance2D(segment2.P1, segment2.P2, segment1.P2); return(d1 < eps || d2 < eps || d3 < eps || d4 < eps); }
public static bool DistanceClose(LineSegment2D segment1, LineSegment2D segment2, bool checkIntersection = false) { const double eps = 35.0; var d1 = DistanceHelper.SegmentToPointDistance2D(segment1, segment2.P1); var d2 = DistanceHelper.SegmentToPointDistance2D(segment1, segment2.P2); var d3 = DistanceHelper.SegmentToPointDistance2D(segment2, segment1.P1); var d4 = DistanceHelper.SegmentToPointDistance2D(segment2, segment1.P2); if (d1 < eps || d2 < eps || d3 < eps || d4 < eps) { return(true); } if (checkIntersection && DistanceHelper.IsIntersect(segment1, segment2)) { return(true); } return(false); }
private static HoughResult GroupSegments(LineSegment2D[] segments) { var solidSegments = new List <LineSegment2D>(); var dashSegments = new List <DashLineSegment2D>(); var grouped = GroupDirectionSerment(segments); foreach (var group in grouped) { var fullSegments = GroupCloseSegment(group.Item2); var allSegments = GroupDashSegment(fullSegments); var dashSegment = GroupCloseDashSegment(allSegments.Item2); solidSegments.AddRange( allSegments.Item1.Where(l => DistanceHelper.Distance(l.P1, l.P2) > MinLineFullLenght)); dashSegments.AddRange( dashSegment.Where(l => DistanceHelper.Distance(l.AsSolid.P1, l.AsSolid.P2) > MinLineFullLenght)); } return(new HoughResult { SolidLines = solidSegments.ToArray(), DashLines = dashSegments.ToArray() }); }