2012-07-01 3 views
0

Итак, у меня есть 2 вектора, вектор положения врага и вектор положения игрока. Мне нужно вычислить шаг (степень, которую мне пришлось бы вращать по оси X от позиции противника, чтобы указать на позицию игрока).Как вычислить Шаг между двумя векторами?

Как получить поле между позицией противника и позиции игрока?

Это была моя последняя попытка, и она, похоже, застряла на 0 градусов.

player_pos.normalise(); 
enemy_pos.normalise(); 

float dot = Vector3f.dot(player_pos, enemy_pos); 


Vector3f rotationVector = new Vector3f(0,0,0); 
rotationVector. x = (float) Math.toDegrees(Math.acos(dot)); 

ответ

1

Разве вы не ищете угол разности?

double angle = Math.acos(Vector3f.dot(player_pos,enemy_pos)/
         (player_pos.length() * enemy_pos.length())); 
+0

deosn't, похоже, не работает. сначала нужно нормализовать игрока и врага? – CyanPrime

+0

Нет, их не нужно нормализовать. – ra4king

+0

Чтобы быть педантичным, их не нужно нормализовать, прежде чем вводить вышеуказанное выражение, потому что шаг «нормализации» принимается явно (разделить на произведение длины вектора). FWIW, однако, этот ответ не дает никакой полезной информации с точки зрения любого объекта. –

0

нормально, я не совсем уверен, что вы имеете в виду, что вы, кажется, есть, если пистолет был в начале координат, указывающих на то, что угол между врагом и игроком.

Предполагаю, что вы хотите превратить оружие противника в игрока.

сначала получить направление игрока по отношению к enenmy // не забудьте проверить нулевой

dir = player_pos -enemy_pos 
dir.normalize() 

angle = asin(dir.y) or angle = acos(dir.z) 
angle = Math.toDegrees(angle); 

вам придется настроить для квадранта (для асин)

if (z < 0) { 
    if (y < 0) { 
     angle = -180 - angle; 
    } 
    else { 
     angle = 180 - angle; 
    } 
} 

Я не занимаюсь разработкой игры, поэтому может быть более эффективный способ, также я не уверен, что это именно то, что вы хотите, было бы намного проще, если бы я мог рисовать фотографии

, который был вокруг оси x, вы, возможно, имели в виду вокруг оси z заменить z на x

0

Что-то, что вам не хватает в вашем первоначальном ударе, - это текущая ориентация того, что вы пытаетесь указать в новое направление. Вам понадобится, если вы захотите выяснить, в каком направлении нужно что-то вращать.

Вы определенно не хотите нормализовать позиции. В этом контексте эта операция не имеет смысла. Точечный продукт между двумя векторами дает вам угол между ними, но точечный продукт между (нормализованными) позициями объекта дает вам угол между этими двумя элементами с точки зрения происхождения, поэтому это, вероятно, не то, что вы хотите.

Я предлагаю нарисовать на листе бумаги информацию, которая у вас есть, и посмотреть, какую информацию вы хотите. В первую очередь, в этом случае вам нужен угол между тем, что и что? Вы хотите изменить то, что в каком объекте?

Вы можете узнать, что, когда вы начинаете рисовать все, что данные, которые вам нужно обработать, и операции, которые вам нужно использовать для выполнения этой обработки, становятся очевидными.

Удачи вам!

Смежные вопросы