2012-07-01 92 views
0

好吧,所以我有2个向量,敌人位置向量和玩家位置向量。我需要计算Pitch(我必须沿着X轴从敌人位置旋转某个角度指向玩家的Y位置)。如何计算两个矢量之间的音高?

如何获得敌方位置和玩家位置之间的距离?

这是我的最后一次尝试,似乎卡在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

好,我不太清楚你的意思,你似乎有什么就有什么,如果枪是在指向的起源是什么敌人和玩家之间的角度。

我会假设你想在玩家身上转动敌人的枪。

先把//别忘了检查零

dir = player_pos -enemy_pos 
dir.normalize() 

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

相对enenmy 玩家的方向,你将不得不调整象限(为ASIN)

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

我不做太多的游戏开发,所以可能会有更高效的方式,我也不确定这正是你想要的,如果我可以画图片会容易很多

围绕x轴,您可能意味着围绕z轴替换z使用x

0

您在初始刺中缺失的某些内容是您尝试指向的任何内容的当前方向一个新的方向。如果你想弄清楚需要旋转的方式,你需要这个。

你绝对不想规范职位。该操作在这种情况下没有意义。两个向量之间的点积可以给出它们之间的角度,但是(规范化的)实体位置之间的点积可以从原点的角度给出这两个项目之间的角度,所以这可能不是您想要的。

我会建议在一张纸上绘制您拥有的信息并查看您想要的信息。首先,在这种情况下,你想要什么和什么之间的角度?你想改变哪个实体?

您可能会发现,当您开始全面绘制时,您需要处理的数据以及您需要用来执行该处理的操作变得明显起来。

祝你好运!

相关问题