2013-05-20 6 views
1

мне нужна помощь вычисления углов точек: enter image description hereC++ углы, тригонометрия

мне нужно, чтобы вычислить угол от точки (0,0) до точек, выделенных из изображения. 1 будет 0 *, 2 составляет около 40-44 * и т. Д.

Моя проблема заключается в том, что atan2 показывает неправильные значения. Токовый выход из atan2 является:

1:41.867535 2:64.653824 3:52.915009 4:30.375608 5:13.328092 

Как я могу вычислить его от точки 0,0? Я не могу использовать какие-либо нестандартные библиотеки.

Я все еще что-то не так. Я пытаюсь:

arrow1 = (M_PI - atan2(y, x) * (180/M_PI); 

Выход:

1: 131.867538 2: 154.653824 3: 142.915009 4: 120.375610 5: 103.328094 

И:

arrow1 = (M_PI - atan2(y, -x) * (180/M_PI); 

Выход:

1: 48.132465 2: 25.346176 3: 37.084991 4: 59.624393 5: 76.671906 
+0

0 Пожалуйста, покажите свой код, – Escualo

+0

Существующий код работает нормально (поиск частей изображения и т.п. в порядке). Моя проблема заключается в недостатке кода для подсчета углов. Вывод осуществляется из простого: arrow1 = atan2 (x, y) * 180/M_PI; – user2336450

ответ

4

Угол вернулся из atan2(deltaY, deltaX) будет угол, в радиан, против часовой стрелки от X axi s.

В настоящее время вы используете arrow1 = atan2(x,y) *180/M_PI;, поэтому вам необходимо его использовать, используя (y,x), а затем переключитесь так, чтобы вы взяли угол по часовой стрелке от -X вместо CCW от + X.

Это означает угол для точки 1, если вы его подаете как atan2(-1, 0), будет на 180 градусов. Для достижения угла, который вы хотите, это должно быть:

double angleFromX = atan2(deltaY, deltaX); 
double angle = M_PI - angleFromX; 
double angleInDegrees = 180 * angle/M_PI; 
+0

Кроме того, не забудьте добавить проверки против 'x == 0'. – cabbagery

Смежные вопросы