public static LineSegment PointsClosestPairBruteForce(List <Point> points) { var n = points.Count; //return Enumerable.Range(0, n - 1) // .SelectMany(i => Enumerable.Range(i + 1, n - (i + 1)) // .Select(j => new LineSegment(points[i], points[j]))) // .OrderBy(seg => D(seg.StartPoint, seg.EndPoint)) // .First(); var result = new LineSegment(points[0], points[1]); var minLength = result.Length(); for (var i = 0; i < n; i++) { for (var j = i + 1; j < n; j++) { if (D(points[i], points[j]) < minLength) { result = new LineSegment(points[i], points[j]); minLength = result.Length(); } } } return(result); }
public static bool PointIsLessOrEqualTo(Point p1, Point p2, Point o) { var op1 = new LineSegment(o, p1); var op2 = new LineSegment(o, p2); var pos = PointOrientationTest(p1, op2); // po lewej stronie > 0 return(pos > 0 || pos.Eq(0) && op1.Length() <= op2.Length()); }