Сортировка 2D-точек по часовой стрелкеC#

Место общения программистов C#
Ответить
Anonymous
 Сортировка 2D-точек по часовой стрелке

Сообщение Anonymous »

Я нашел способ сортировать 2D-точки по часовой стрелке в Unity, но по какой-то непонятной мне причине иногда точки все еще располагаются в неправильном порядке.
На первом изображении красная сфера находится в центре, а остальные сферы раскрашены по порядку.
На втором рисунке показано положение этих сфер в неправильном порядке.
Изображение

Изображение

Код: Выделить всё

  private static Vector2[] SortClockwise(List vertices)
{
// calculate center
Vector2 center = Vector2.zero;
for (int i = 0; i < vertices.Count; i++)
{
center += vertices[i];
}
center /= vertices.Count;

// order by the angle to center
return vertices.OrderBy(point => Math.Atan2(point.x - center.x, point.y - center.y)).ToArray();
}
Изменить:
Верхний левый угол (красный: текущий индекс, синие линии: ожидание)
< img alt="верхний левый угол" src="https://i.sstatic.net/6J6zZfBM.png" />
Теперь я понимаю проблему вогнутости и, насколько я понимаю, могу предположим, что все выпуклые многоугольники расположены в правильном порядке, а вогнутые будут ложными?
Если я, например, возьму изображение 2 и проверю наличие вогнутых многоугольников и поменяю положение, если оно вогнутое (в зависимости от того, насколько я знаю какие позиции поменять местами)? или для более сложных форм будет больше проблем?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -clockwise
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»