コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }