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); }
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); } }
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); }