#geometry
#геометрия
Вопрос:
Мне нужно вычислить угол между двумя векторами. Векторы могут указывать в любом направлении и были нормализованы. Я хочу, чтобы угол измерялся по часовой стрелке от VectorA к vectorB в некоторых случаях и против часовой стрелки от VectorA к vectorB в других случаях (другими словами, я не просто хочу знать наименьший угол).
Вот что у меня есть
if (clockwise) angle = Math.atan2(vectorA.y, vectorA.x) - Math.atan2(vectorB.y, vectorB.x);
else angle = -1*(Math.atan2(vectorA.y, -vectorA.x) - Math.atan2(vectorB.y, -vectorB.x));
Я думаю, это никогда не сработает для отражающих углов? Итак, как мне вычислить угол в диапазоне 0-> 2pi?
Ответ №1:
Вычисляйте его последовательно для направления по часовой стрелке и вычитайте из 360 (или 2 * пи), когда вам нужно, против часовой стрелки.
Если вам нужно нормализовать до определенного диапазона градусов, то вы можете сделать это путем прямой нормализации выходных данных вашего кода. Итак, вычислите угол по часовой стрелке, затем прибавьте 2 * пи, пока он не станет больше нуля, затем возьмите результат mod 2 * пи, и вы получите результат в диапазоне [0, 2*пи).