Для начинающих, таких как я, другие ответы - хотя, скорее всего, они дадут вам хороший результат - было немного трудно понять, что происходит. Поэтому, вот мой метод, который проверяет, какое направление (по часовой стрелке или против часовой стрелки) является кратчайшим между cp (текущая точка) и tp (целевая точка). Это также назначает это самое короткое значение расстояния для переменной shorttestDistance. Исходя из того, для чего мне конкретно нужен этот метод, для меня было важно вернуть логическое значение относительно того, было ли кратчайшее расстояние по часовой стрелке или против часовой стрелки. Вот метод:
public boolean checkIfClockwiseIsShortest(int cp, int tp) {
boolean clockwiseIsShortest = false;
if (cp != tp) { // if current point and target point are not the same...
if (tp > cp) { // if current point is less than target point AND..
if ((tp - cp) <= ((360 - tp) + cp)) {
clockwiseIsShortest = true;
shortestDistance = (tp-cp);
System.out.println("Case A: " + shortestDistance +" degrees clockwise");//[CAN REMOVE]
} else if ((tp - cp) > ((360 - tp) + cp)) {
clockwiseIsShortest = false;
shortestDistance = ((360 - tp) + cp);
System.out.println("Case B: " + shortestDistance+" degrees counter-clockwise");//[CAN REMOVE]
}
} else { // BUT if target point < current point
if ((cp - tp) <= ((360 - cp) + tp)) {
clockwiseIsShortest = false;
shortestDistance = (cp-tp);
System.out.println("Case C: " + shortestDistance+" degrees counter-clockwise");//[CAN REMOVE]
} else if ((cp - tp) > ((360 - cp) + tp)) {
clockwiseIsShortest = true;
shortestDistance = ((360 - cp) + tp);
System.out.println("Case D: " + shortestDistance+" degrees clockwise");//[CAN REMOVE]
}
}
}
return clockwiseIsShortest;
}
Обратите внимание, что cp является начальной точкой в целых градусах, а tp является целевой точкой в целых градусах; тип может быть изменен на удвоение для большей точности.
Он учитывает движение (против) по часовой стрелке за отметку 0 градусов.
3, если это проверяет:
- Начальная / текущая точка (cp) равна целевой точке (tp)? в таком случае расстояние не указывается.
- если не равно, является ли целевая точка> текущей точкой в градусах ИЛИ является ли целевая точка <текущей точкой в градусах? </li>
- Исходя из этого, последнее, если в гнезде проверяет, идет ли по часовой стрелке меньше градусов, чем против часовой стрелки (или наоборот).
Опять же, другие посты с более коротким кодом могут нормально работать.
Редактировать: Кстати, переменная shorttestDistance является переменной класса, инициализированной в том же классе, что и этот метод; если вы копируете этот код, убедитесь, что ваш класс, в который вы его помещаете, также имеет переменную shorttestDistance, основанную на типе примитива в качестве переменных cp и tp (или приведите его).