Сортировка точек в порядке следования против часовой стрелки - C#
Формулировка задачи:
Здравствуйте, снова задачка с курсов, нужна ваша помощь.
Необходимо отсортировать точки в порядке следования против часовой стрелки,
Необходимо написать
В итоге получаю вывод:
0 -1
1 0
0.01 1
0 1
-1 0
То есть, первой считается точка на 6 часов.
А должно быть так(первая точка на 3 часа):
1 0
0.01 1
0 1
-1 0
0 -1
Как можно исправить код?
считая первой ту, что находится на 3:00
. Дан такой код, который менять нельзя:
Листинг программы
- private static void Main()
- {
- var array = new[]
- {
- new Point { X = 1, Y = 0 },
- new Point { X = -1, Y = 0 },
- new Point { X = 0, Y = 1 },
- new Point { X = 0, Y = -1 },
- new Point { X = 0.01, Y = 1 }
- };
- Array.Sort(array, new ClockwiseComparer());
- foreach (Point e in array)
- Console.WriteLine("{0} {1}", e.X, e.Y);
- }
- public class Point
- {
- public double X;
- public double Y;
- }
ClockwiseComparer
. Также есть подсказка: "Используйте функцию Math.Atan2(y, x) возвращающую угол радиус-вектора (x, y) в диапазоне (-PI..PI]"
Вот что у меня получилось:
Листинг программы
- public class ClockwiseComparer : IComparer
- {
- public int Compare(object x, object y)
- {
- var point1 = (Point)x;
- var point2 = (Point)y;
- return Math.Atan2(point1.Y, point1.X).CompareTo(Math.Atan2(point2.Y, point2.X));
- }
- }
Решение задачи: «Сортировка точек в порядке следования против часовой стрелки»
textual
Листинг программы
- public int Compare(object x, object y)
- {
- var p1 = x as Point;
- var p2 = y as Point;
- return Math.Atan2(-p1.Y, -p1.X).CompareTo(Math.Atan2(-p2.Y, -p2.X));
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д