Пример #1
0
        public static void Main(string[] args)
        {
            var set = new OrderedSet<int>();
            Console.WriteLine("Add numbers --> 19, 21, 55, 27, 66, 33, 17, 85");
            set.Add(19);
            set.Add(21);
            set.Add(55);
            set.Add(27);
            set.Add(66);
            set.Add(33);
            set.Add(17);
            set.Add(85);
            Console.WriteLine();
            Console.WriteLine("In-order print --> ");
            set.PrintInOrder(set.Root);
            Console.WriteLine();
            Console.WriteLine("Foreach --> ");
            foreach (var item in set)
            {
                Console.Write(item + " ");
            }

            Console.WriteLine();
            Console.WriteLine("EachInOrder(Action<T> action) --> ");
            set.EachInOrder(n => Console.Write(n + " "));
            Console.WriteLine();
            Console.WriteLine("Insert 44 --> ");
            set.Add(44);
            set.EachInOrder(n => Console.Write(n + " "));
            Console.WriteLine();
            Console.WriteLine("Remove 66 --> ");
            set.Remove(66);
            set.EachInOrder(n => Console.Write(n + " "));
            Console.WriteLine();
            Console.WriteLine("Find 17 --> ");
            var find17 = set.Find(17) != null ? "17" : "null";
            Console.WriteLine(find17);
            Console.WriteLine();
            Console.WriteLine("Find 200 --> ");
            var find200 = set.Find(200) != null ? "200" : "null";
            Console.WriteLine(find200);
            Console.WriteLine();
            Console.WriteLine("Contains 44 --> ");
            var contains44 = set.Contains(44) == true ? "true" : "false";
            Console.WriteLine(contains44);
            Console.WriteLine();
            Console.WriteLine("Contains 200 --> ");
            var contains200 = set.Contains(200) == true ? "true" : "false";
            Console.WriteLine(contains200);
            Console.WriteLine();
            Console.WriteLine("Count --> ");
            Console.WriteLine(set.Count);
            Console.WriteLine(
            "Count after Add and Remove: Add 11, Remove 55, Add 5, Add 84, Add 18, Remove 5, Remove 18 (no such value)");
            set.Add(11);
            set.Remove(55);
            set.Add(5);
            set.Add(84);
            set.Add(18);
            set.Remove(5);
            set.Remove(18);
            Console.WriteLine("Count --> {0}", set.Count);
            set.EachInOrder(n => Console.Write(n + " "));
            Console.WriteLine();
            Console.WriteLine("Min value --> {0}", set.Min());
            Console.WriteLine();
            Console.WriteLine("Min value --> {0}", set.Max());
            Console.WriteLine();
            set.Clear();
            Console.WriteLine("Clear --> {0} (Count)", set.Count);
        }
Пример #2
0
        public override void Run(List<Point> points, List<Line> lines, List<Polygon> polygons, ref List<Point> outPoints, ref List<Line> outLines, ref List<Polygon> outPolygons)
        {
 
            OrderedDictionary<double, Point> point = new OrderedDictionary<double, Point>();
            OrderedSet<double> angles = new OrderedSet<double>();
            if (points.Count == 1)
            {
                outPoints.Add(points[0]);
            }
            else if (points.Count == 2 && points[0] != points[1])
            {
                outPoints.Add(points[0]);
                outPoints.Add(points[1]);
            }
            else
            {
                double X = 0;
                double Y = 0;
                for (int i = 0; i < 3; i++)
                {
                    X += points[i].X;
                    Y += points[i].Y;
                }
                Point medPoint = new Point(X / 3, Y / 3);
                Point medPoint2 = new Point((X / 3) + 100, Y / 3);
                
                Point ab = new Point(medPoint.X - medPoint2.X, medPoint.Y - medPoint2.Y);
              
                for (int i = 0; i < points.Count; i++)
                {
                    Point ac = new Point(points[i].X - medPoint.X, points[i].Y - medPoint.Y);
                    double cross = HelperMethods.CrossProduct(ab, ac);
                    double dot = (ab.X * ac.X) + (ab.Y * ac.Y);

                    double angle = Math.Atan2(cross, dot);
                    if (angle < 0)
                        angle = angle + (2 * Math.PI);
                    angles.Add(angle);
                    point[angle] = points[i];
                }
                for (int i = 3; i < point.Count; i++)
                {
                    double next = 0;
                    double prev = 0;
                        if (angles[i] == angles.Max())
                        {
                            next = angles[0];
                            prev = angles.Max();
                        }
                        else if (angles[i] == angles.Min())
                        {
                            prev = angles[0];
                            next = angles.Max();
                        }
                        else
                        {
                            KeyValuePair<double, double> x = angles.DirectUpperAndLower(angles[i]);
                            next = x.Key;
                            if (next == 0.0)
                            {
                                next = angles[0];
                            }
                            prev = x.Value;
                            if (prev == 0.0)
                            {
                                prev = angles.Max();
                            }
                        }
                    
                    if (HelperMethods.CheckTurn(new Line(point[prev], point[next]), point.ElementAt(i).Value) == Enums.TurnType.Right || HelperMethods.CheckTurn(new Line(point[prev], point[next]), point.ElementAt(i).Value) == Enums.TurnType.Colinear)
                        {
                            int count = 0;
                            double newprev = angles.DirectUpperAndLower(prev).Value;
                            if (newprev == 0.0)
                            {
                                newprev = angles.Max();
                            }
                       
                            while (HelperMethods.CheckTurn(new Line(point[angles[i]], point[prev]), point[newprev]) == Enums.TurnType.Left)
                            {
                                double oldprev = prev;
                                prev = newprev;
                                newprev = angles.DirectUpperAndLower(prev).Value;
                                if (newprev == 0.0)
                                {
                                    newprev = angles.Max();
                                }
                                point.Remove(oldprev);
                                angles.Remove(oldprev);
                                i--;
                            }
                            double newnext = angles.DirectUpperAndLower(next).Key;
                            if (newnext == 0.0)
                            {
                                newnext = angles[0];
                            }

                            while (HelperMethods.CheckTurn(new Line(point[angles[i]], point[next]), point[newnext]) == Enums.TurnType.Right)
                            {
                                double oldnext = next;
                                next = newnext;
                                newnext = angles.DirectUpperAndLower(next).Key;
                                if (newnext == 0.0)
                                {
                                    newnext = angles[0];
                                }
                                point.Remove(oldnext);
                                angles.Remove(oldnext);
                            }
                        }
                        else
                        {
                            point.Remove(angles[i]);
                            angles.Remove(angles[i]);
                            i--;
                        }
                }
            }
            for (int i = 0; i < point.Count; i++)
            {
                outPoints.Add(point.ElementAt(i).Value);
            }
        }
Пример #3
0
    static void Main()
    {
        var set = new OrderedSet <int>();

        Console.WriteLine("Add: 29, 11, 35, 7, 16, 23, 37, 17");
        set.Add(29);
        set.Add(11);
        set.Add(35);
        set.Add(7);
        set.Add(16);
        set.Add(23);
        set.Add(37);
        set.Add(17);

        Console.WriteLine();

        Console.WriteLine("In-order print: ");
        set.PrintInorder(set.Root);

        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Foreach: ");
        foreach (var item in set)
        {
            Console.Write(item + " ");
        }

        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("EachInOrder(Action<T> action): ");
        set.EachInOrder(n => Console.Write(n + " "));

        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Insert 23: ");
        set.Add(23);
        set.EachInOrder(n => Console.Write(n + " "));

        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Remove 16: ");
        set.Remove(16);
        set.EachInOrder(n => Console.Write(n + " "));

        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Find 7: ");
        var find7 = set.Find(7) != null ? "7" : "null";

        Console.WriteLine(find7);


        Console.WriteLine();

        Console.WriteLine("Find 200: ");
        var find200 = set.Find(200) != null ? "200" : "null";

        Console.WriteLine(find200);

        Console.WriteLine();

        Console.WriteLine("Contains 7: ");
        var contains7 = set.Contains(7) == true ? "true" : "false";

        Console.WriteLine(contains7);

        Console.WriteLine();

        Console.WriteLine("Contains 200: ");
        var contains200 = set.Contains(200) == true ? "true" : "false";

        Console.WriteLine(contains200);

        Console.WriteLine();

        Console.WriteLine("Count:");
        Console.WriteLine(set.Count);

        Console.WriteLine(
            "Count after Add and Remove: Add 1, Remove 23, Add 5, " +
            "Add 14, Add 108, Remove 5, Remove 12 (no such value)");
        set.Add(1);
        set.Remove(23);
        set.Add(5);
        set.Add(14);
        set.Add(108);
        set.Remove(5);
        set.Remove(12);// no such value
        Console.WriteLine("Count: {0}", set.Count);
        set.EachInOrder(n => Console.Write(n + " "));

        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Min value: {0}", set.Min());

        Console.WriteLine();

        Console.WriteLine("Min value: {0}", set.Max());

        Console.WriteLine();

        set.Clear();
        Console.WriteLine("Clear: {0} (Count)", set.Count);
    }