好的,所以我有2个向量,敌人位置向量和玩家位置向量。我需要计算音高(我必须沿着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));
答案 0 :(得分:1)
你不只是在寻找差异角度吗?
double angle = Math.acos(Vector3f.dot(player_pos,enemy_pos) /
(player_pos.length() * enemy_pos.length()));
答案 1 :(得分:0)
好吧我不太清楚你的意思,你似乎有什么,如果枪是在原点指向敌人和玩家之间的角度。
我会假设你想把敌人的枪转向玩家。
首先得到玩家相对于敌人的方向 //不要忘记检查零
dir = player_pos -enemy_pos
dir.normalize()
angle = asin(dir.y) or angle = acos(dir.z)
angle = Math.toDegrees(angle);
你必须调整象限(用于asin)
if (z < 0) {
if (y < 0) {
angle = -180 - angle;
}
else {
angle = 180 - angle;
}
}
我没有做太多的游戏开发,所以可能会有更高效的方式,我也不确定这是你想要的,如果我可以画画会更容易
围绕x轴,你可能意味着围绕z轴用x
代替z答案 2 :(得分:0)
你在初始刺中缺少的东西是你试图指向一个新方向的任何东西的当前方向。如果你想弄清楚需要旋转的方式,你需要这样做。
你绝对不想将头寸标准化。在这种情况下,该操作没有意义。两个向量之间的点积给出了它们之间的角度,但是(标准化的)实体位置之间的点积给出了从原点的角度看这两个项之间的角度,所以这可能不是你想要的。
我建议在一张纸上绘制您所拥有的信息,并查看您想要的信息。首先,在这种情况下,你想要什么和什么之间的角度?您想要更改实体中的内容吗?
您可能会发现,当您开始全面绘制时,您需要处理的数据以及执行该处理所需的操作变得非常明显。
祝你好运!