Сортировка точек в порядке следования против часовой стрелки - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, снова задачка с курсов, нужна ваша помощь. Необходимо отсортировать точки в порядке следования против часовой стрелки,

считая первой ту, что находится на 3:00

. Дан такой код, который менять нельзя:
Листинг программы
  1. private static void Main()
  2. {
  3. var array = new[]
  4. {
  5. new Point { X = 1, Y = 0 },
  6. new Point { X = -1, Y = 0 },
  7. new Point { X = 0, Y = 1 },
  8. new Point { X = 0, Y = -1 },
  9. new Point { X = 0.01, Y = 1 }
  10. };
  11. Array.Sort(array, new ClockwiseComparer());
  12. foreach (Point e in array)
  13. Console.WriteLine("{0} {1}", e.X, e.Y);
  14. }
  15. public class Point
  16. {
  17. public double X;
  18. public double Y;
  19. }
Необходимо написать ClockwiseComparer. Также есть подсказка: "Используйте функцию Math.Atan2(y, x) возвращающую угол радиус-вектора (x, y) в диапазоне (-PI..PI]" Вот что у меня получилось:
Листинг программы
  1. public class ClockwiseComparer : IComparer
  2. {
  3. public int Compare(object x, object y)
  4. {
  5. var point1 = (Point)x;
  6. var point2 = (Point)y;
  7. return Math.Atan2(point1.Y, point1.X).CompareTo(Math.Atan2(point2.Y, point2.X));
  8. }
  9. }
В итоге получаю вывод: 0 -1 1 0 0.01 1 0 1 -1 0 То есть, первой считается точка на 6 часов. А должно быть так(первая точка на 3 часа): 1 0 0.01 1 0 1 -1 0 0 -1 Как можно исправить код?

Решение задачи: «Сортировка точек в порядке следования против часовой стрелки»

textual
Листинг программы
  1. public int Compare(object x, object y)
  2.     {
  3.         var p1 = x as Point;
  4.         var p2 = y as Point;
  5.         return Math.Atan2(-p1.Y, -p1.X).CompareTo(Math.Atan2(-p2.Y, -p2.X));
  6.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы