private static void UpdateDeltaOnLeft(ref Point p, ref Point l, ref double delta, SkipList <Point> t, ref Point?a, ref Point?b)
        {
            var i = 0;

            while (l != new Point(double.NegativeInfinity, double.NegativeInfinity) && (i < 4))
            {
                var dist = D(p, l);
                if (dist < delta)
                {
                    delta = dist;
                    a     = p;
                    b     = l;
                }
                l = t.Previous(l);

                if (l == default(Point))
                {
                    break;
                }

                i++;
            }
        }
        private static void UpdateDeltaOnRight(ref Point p, ref Point r, ref double delta, SkipList <Point> t, ref Point?a, ref Point?b)
        {
            var i = 0;

            while (r != new Point(double.NegativeInfinity, double.PositiveInfinity) && (i < 4))
            {
                var dist = D(p, r);
                if (dist < delta)
                {
                    delta = dist;
                    a     = p;
                    b     = r;
                }
                r = t.Next(r);

                if (r == default(Point))
                {
                    break;
                }

                i++;
            }
        }