Арктан не получает правильный угол [закрыто]

Итак, понятно, почему, но моя функция угла здесь не даст мне нужных углов, в качестве временного исправления я вручную назначил квадранты. После выполнения я создал четыре линии с углами 296, 237, 135 и 183 в соответствии с углом atan2. Выходные данные для этих углов должны быть примерно 324, 23, 125 и 198. Что-то не так? Я пробовал исключительно с установкой distancey = y2-y1 disx = x2-x1. вручную вводить отрицательные значения в функциях atan и atan2, но мои углы всегда отключены

          if (x1 < x2) distanceX = x2 - x1;
    else if (x1 > x2) distanceX = x1 - x2;
    if (y1 < y2) distanceY = y2 - y1;
    else if (y1 > y2) distanceY = y1 - y2;
    angle = Math.atan2(distanceY, distanceX);
    angle = angle * 180 * Math.PI;
    if (y2 < y1 && x2 < x1) angle = 225; //top l
    else if (y2 > y1 && x2 < x1) angle = 135; //bottom l
    else if (y2 < y1 && x2 > x1) angle = 315; //top r
    else if (y2 > y1 && x2 > x1) angle = 45; //bottom r
    do { if (angle >= 360) angle = angle - 360; } while (angle >= 360);
    do { if (angle < 0) angle = angle + 360; } while (angle < 0);
    return angle;
}

1 ответ

Вам нужно разделить на Math.PI, а не умножать на него:

       if (x1 < x2) distanceX = x2 - x1;
 else if (x1 > x2) distanceX = x1 - x2;
 if (y1 < y2) distanceY = y2 - y1;
 else if (y1 > y2) distanceY = y1 - y2;
 angle = Math.atan2(distanceY, distanceX);
 angle = angle * 180 / Math.PI;
 if (y2 < y1 && x2 < x1) angle = 225; //top l
 else if (y2 > y1 && x2 < x1) angle = 135; //bottom l
 else if (y2 < y1 && x2 > x1) angle = 315; //top r
 else if (y2 > y1 && x2 > x1) angle = 45; //bottom r
 do { if (angle >= 360) angle = angle - 360; } while (angle >= 360);
 do { if (angle < 0) angle = angle + 360; } while (angle < 0);
 return angle;
Другие вопросы по тегам