Арктан не получает правильный угол [закрыто]
Итак, понятно, почему, но моя функция угла здесь не даст мне нужных углов, в качестве временного исправления я вручную назначил квадранты. После выполнения я создал четыре линии с углами 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;