Рассчитать угол точки по окружности
Я уже знаю, как найти точку на окружности круга на основе угла. Код, который я использую для этого, приведен ниже.
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.