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

1

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

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;
}
Теги:
geometry
trigonometry
circle
cartesian-coordinates

1 ответ

4
Лучший ответ

Вы смешиваете грех и сон.

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);

На основе реализации вам может потребоваться настроить значение theta (angle).

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

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

newAngle = (newAngle+360)%360

Удерживать угол положительным и от 0 до 360.

  • 0
    Если это не работает, скажи мне ...
  • 0
    Почему вы изменили радиус?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню