алгоритм расчета наклона между линией относительно центральной координаты - PullRequest
1 голос
/ 03 ноября 2010

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

Итак, вот что я делаю

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

Но!У меня 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;
}

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

atan2 () должен возвращать значение в интервале [-pi, pi] (т.е. [-180, 180]) и работает со знаками x и y, чтобы вычислить квадрант. ( C ++ ref )

Технически, у вас есть 360 градусов.

0 голосов
/ 29 декабря 2018

Формула для расчета угла от 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 .
...