алгоритм расчета наклона между линией относительно центрационной координаты
Вопрос
Пожалуйста, помогите с алгоритмом расчета наклона, поэтому у нас есть картезированная система координат. Х прямо на вершине. Есть линейность, которая проходит через центр координат. Необходимо определить угол относительно оси OX.
Так вот что я делаю
- Некоторые функции передаются в начало происхождения (верхняя строка) и конец строки
- Определить DX, DY
- Hildren выпускает два параметра в ATAN2 (DY, DX)
- Возвращает результат в радианах.
Но! I ATAN2 работает только в пределах 180 градусов. После 180 идет в другое направление.
Таким образом, вопрос: какой правильный алгоритм нахождения угла? Нужно мне взять Dy, значения DX по величине? Как сделать аркангентом рассчитанным для всех 360 и более? Я был бы рад услышать конкретные алгоритмы или кусочки кодовых комментариев. Спасибо!
static inline CGFloat angleBetweenLinesInRadians2 (CGPoint line1Start, CGPoint line1End)
{
CGFloat dx = 0, dy = 0;
dx = line1End.x - line1Start.x; / / whether to do fabs (line1End.x - line1Start.x);
dy = line1End.y - line1Start.y;
CGFloat rads = atan2 (dy, dx); / / whether to do fabs (rads)
return rads;
}
Решение
Предполагается, что ATAN2 () должен вернуть значение в интервале [-PI, PI] (то есть [-180, 180]) и работает с признаками X и Y, чтобы выяснить квадрант. (C ++ Ref.)
Так технически у вас 360 градусов.
Другие советы
Формула для расчета угла от 0 до 360 градусов:
f (x, y) = 180-90 * (1 + знак (x)) * (1 знак (y ^ 2)) - 45 * (2 + знак (x)) * знак (y)
-180/pi()*sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))
x=x2-x1 and y=y2-y1 .