Мне нужен способ преобразования координат X и Y в угол. У меня есть этот код, но мне нужен этот макет:Преобразование X, Y в угол
180
90 270
360
private double getAngle(double xTouch, double yTouch) {
double x = xTouch - (slideBtn.getWidth()/2d);
double y = slideBtn.getHeight() - yTouch - (slideBtn.getHeight()/2d);
switch (getQuadrant(x, y)) {
case 1:
return Math.asin(y/Math.hypot(x, y)) * 180/Math.PI;
case 2:
return 180 - Math.asin(y/Math.hypot(x, y)) * 180/Math.PI;
case 3:
return 180 + (-1 * Math.asin(y/Math.hypot(x, y)) * 180/Math.PI);
case 4:
return 360 + Math.asin(y/Math.hypot(x, y)) * 180/Math.PI;
default:
return 0;
}
}
/**
* @return The selected quadrant.
*/
private static int getQuadrant(double x, double y) {
if (x >= 0) {
return y >= 0 ? 1 : 4;
} else {
return y >= 0 ? 2 : 3;
}
}
Edit, чтобы прояснить проблему: У меня проблема была в том, что я получал неправильные углы для x, y углы. Например: 0/360 градусов - верхняя сторона круга, а 180 градусов - нижняя сторона круга. Я попытался исправить это, используя код выше (с разными квадрантами, но это не сработало). Принятый ответ сделал трюк для меня.
Когда я делаю метод getAngle(), я получаю неправильный макет угла. Поэтому мне нужен угол, как указано выше. Atan2 не то, что я хотел ... 180 градусов вместо 90 градусов сверху. Поэтому поверните весь угол на 90 градусов, но я не знаю, как это сделать. – matthijs2704
Когда вы получите результаты atan2, вы должны просто добавить PI/2 для поворота угла против часовой стрелки на 90 градусов, если это ваша проблема , Но проблема в том, что я не понимаю, где на вашем макете 0 градусов, а углы увеличиваются по часовой стрелке или против часовой стрелки? –
0 градусов в той же точке, что и 360 градусов, но я попробую atan2! Спасибо, и я приму ваш ответ, когда он сработает – matthijs2704