У меня есть несколько полигональных карт (состоящих из линий и дуг). Я использую 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)
Если ваша желаемая дуга всегда должна быть <180 градусов, вы можете применить следующий подход для преодоления ловушек периодичности и пересечения нуля:
if Math.sin(endAngle-startAngle) < 0 then swap
Я думаю, что углы должны быть в радианах в turfjs.
Также проверьте - возможно, вам нужно изменить <0
на >0
, чтобы указать направление по часовой стрелке в вашей системе координат.
Я использовал это с помощью Коррла, чтобы определить направление по часовой стрелке, чтобы потом знать, менять местами или нет. JavaScript - найти направление поворота с двух сторон