Мне нужна помощь в расчете углов точек:
Мне нужно рассчитать угол от точки (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
Угол вернулся из 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;
Других решений пока нет …