Углы С ++, тригонометрия

Мне нужна помощь в расчете углов точек:
введите описание изображения здесь

Мне нужно рассчитать угол от точки (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

1

Решение

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

Вы используете 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;
4

Другие решения

Других решений пока нет …