Сортировка точек в порядке следования против часовой стрелки - 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)); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д