Как определить, нужно ли поменять местами начальный и конечный угол при рисовании дуги

У меня есть несколько полигональных карт (состоящих из линий и дуг). Я использую turf.lineArc() для вычисления точек на дуге, и для этого начальная и конечная точки дуги должны быть по часовой стрелке, в противном случае их нужно поменять местами. У меня есть следующий код, чтобы поменять местами начальную и конечную точки (но это не совсем правильно)

if (endAngle < startAngle) {
   endAngle = endAngle + 360;
}
if (startAngle < endAngle) {
  var e = endAngle;
  endAngle = startAngle;
  startAngle = e;
 }
 while (startAngle - endAngle > 180) {
  startAngle = startAngle - 360;
}
var arc = turf.lineArc(center, radius, startAngle, endAngle, options);

Моя проблема заключается в том, чтобы знать, когда поменять местами начало и конец, а когда нет. На моем прикрепленном изображении Map1 работает правильно, не меняя местами, но Map2 необходимо поменять местами начальную и конечную точки. (и они оба должны использовать один и тот же код). Если на карте 2 начало и конец не поменялись местами вокруг turf.lineArc рисует большую дугу в 353 градуса, а это не то, что мне нужно. Как мне исправить мой код, чтобы я менял местами начальную и конечную точки только при движении от начала до конца против часовой стрелки?

Спасибо :)

Редактировать: дуга может быть <180 или>180, и я знаю, является ли она большой (>180) или второстепенной (<180)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если ваша желаемая дуга всегда должна быть <180 градусов, вы можете применить следующий подход для преодоления ловушек периодичности и пересечения нуля:

if Math.sin(endAngle-startAngle) < 0 then swap

Я думаю, что углы должны быть в радианах в turfjs.

Также проверьте - возможно, вам нужно изменить <0 на >0, чтобы указать направление по часовой стрелке в вашей системе координат.

Ответ принят как подходящий

Я использовал это с помощью Коррла, чтобы определить направление по часовой стрелке, чтобы потом знать, менять местами или нет. JavaScript - найти направление поворота с двух сторон

Другие вопросы по теме