алгоритм расчета наклона между линией относительно центрационной координаты

StackOverflow https://stackoverflow.com/questions/4085687

  •  28-09-2019
  •  | 
  •  

Вопрос

Пожалуйста, помогите с алгоритмом расчета наклона, поэтому у нас есть картезированная система координат. Х прямо на вершине. Есть линейность, которая проходит через центр координат. Необходимо определить угол относительно оси OX.

Так вот что я делаю

  1. Некоторые функции передаются в начало происхождения (верхняя строка) и конец строки
  2. Определить DX, DY
  3. Hildren выпускает два параметра в ATAN2 (DY, DX)
  4. Возвращает результат в радианах.

Но! 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 .
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top