Рассчитать угол точки по окружности

Я уже знаю, как найти точку на окружности круга на основе угла. Код, который я использую для этого, приведен ниже.

x = Math.sin(Math.toRadians(angle)) * radius;
y = Math.cos(Math.toRadians(angle)) * radius;

Я пытаюсь отменить этот процесс.

Пока у меня есть этот код, который полностью работает только для углов меньше или равных 90 градусов.

DecimalFormat df = new DecimalFormat("###.####");

angleFromX = normalize(
    Double.parseDouble(
        df.format(
            Math.toDegrees(
                Math.asin(
                    (x / radius)
                )
            )
        )
    )
);
angleFromY = normalize(
    Double.parseDouble(
        df.format(
            Math.toDegrees(
                Math.acos(
                    (y / radius)
                )
            )
        )
    )
);

И вот normalize метод, использованный выше.

public static double normalize(double angle) {
    angle %= 360;

    if (angle < 0) {
        angle = angle + 360;
    }

    return angle;
}

1 ответ

Решение

Вы перепутали грех и соз.

double x = Math.cos(Math.toRadians(angle)) * radius;
double y = Math.sin(Math.toRadians(angle)) * radius;

Чтобы преобразовать обратно, используйте эту формулу:

double newRadius = Math.hypot(x, y);
double theta = Math.atan2(y,x);
double newAngle = Math.toDegrees(theta);

В зависимости от реализации вам может понадобиться скорректировать значение тета (угол).

  • Если это в квадранте 2 или 3, добавьте 180 градусов.
  • Если это в квадранте 4, добавьте 360 градусов.

Также вам может понадобиться добавить:

newAngle = (newAngle+360)%360

Чтобы угол оставался положительным и составлял от 0 до 360.

Другие вопросы по тегам