Как найти угол по часовой стрелке в градусе между двумя векторами в Java

Все вектор

Сначала я хочу назвать этот следующий вектор как:

Вектор M1 = [O → M1]; Вектор C1 = [O → E];

Вектор M2 = [A → M2]; Вектор C2 = [A → C];

Вектор M3 = [B → M3]; Вектор C3 = [B → G];

каждый M вектор является основным вектором или базовым вектором.

Моя проблема в том, как найти угол между этими векторами (от M до C). чтобы решить, в каком направлении смотрел С, сравните с М.

например

1.) Направление M1 и C1 правильное.

2.) Направление M2 и C2 осталось.

3.) Направление M3 и C3 вернулось.

пс. извините за мой плохой английский, если вы не понимаете, что я пытаюсь сказать, спросите меня.

Отредактировано: угол должен быть по часовой стрелке.

1 ответ

Решение

Благодаря MvG от Direct способ вычисления угла по часовой стрелке между двумя векторами его решение работает идеально.

double dot = C.dot(M);
double det = ((C.getX()*M.getZ()) - (C.getZ()*M.getX()));
double angle = Math.toDegrees(Math.atan2(det, dot));

String movedirection = "";
if(angle < -135 || angle >= 135){
movedirection = "Front";
};
if(angle < 135 && angle >= 45){
movedirection = "right";
};
if(angle < 45 && angle >= -45){
movedirection = "back";
};
if(angle < -45 && angle >= -135){
movedirection = "left";
};
Другие вопросы по тегам