Java 指向坐标

Java 指向坐标,java,bukkit,Java,Bukkit,我试着画一个指向某个位置的箭头,但问题是当我画一个向量的角度时,他无法区分东西方向,因为东西方向都是90°。我怎样才能使西面为负数或将其加180°以使两者之间产生差异 我的代码: double angle = 0; Vector a = (targetLoc).toVector().subtract(player.getLocation().toVector()).normalize(); Vector b = player.getLocation().getDirection()

我试着画一个指向某个位置的箭头,但问题是当我画一个向量的角度时,他无法区分东西方向,因为东西方向都是90°。我怎样才能使西面为负数或将其加180°以使两者之间产生差异

我的代码:

double angle = 0;       
Vector a = (targetLoc).toVector().subtract(player.getLocation().toVector()).normalize();
Vector b = player.getLocation().getDirection();
angle = Math.acos(a.dot(b));
angle = Math.toDegrees(angle);
targetLoc是我想指出的位置

例如,当坐标与玩家视线成90°时,西侧和est侧的角度为90°,或当坐标与玩家视线成45°时,西侧和est侧的角度为45°


我只想使用x和z平面图,不想使用y平面图。

这是我所做的,谢谢你的帮助

        Vector a = (targetLoc).toVector().subtract(player.getLocation().toVector()).normalize();
        Vector b = player.getLocation().getDirection();
        angle = Math.acos(a.dot(b));
        angle = Math.toDegrees(angle);
        if(a.getX()*b.getZ() - a.getZ()*b.getX() < 0) {
            angle = -angle;
        }
Vector a=(targetLoc.toVector().subtract(player.getLocation().toVector()).normalize();
向量b=player.getLocation().getDirection();
角度=Math.acos(a.dot(b));
角度=数学角度(角度);
如果(a.getX()*b.getZ()-a.getZ()*b.getX()<0){
角度=-角度;
}

以下是我所做的,谢谢你的帮助

        Vector a = (targetLoc).toVector().subtract(player.getLocation().toVector()).normalize();
        Vector b = player.getLocation().getDirection();
        angle = Math.acos(a.dot(b));
        angle = Math.toDegrees(angle);
        if(a.getX()*b.getZ() - a.getZ()*b.getX() < 0) {
            angle = -angle;
        }
Vector a=(targetLoc.toVector().subtract(player.getLocation().toVector()).normalize();
向量b=player.getLocation().getDirection();
角度=Math.acos(a.dot(b));
角度=数学角度(角度);
如果(a.getX()*b.getZ()-a.getZ()*b.getX()<0){
角度=-角度;
}

这是未经测试的代码,但您可以做一些类似于查看
asin
的事情,看看它应该是正的还是负的
angle=Math.asin(a.dot(b))>=0?Math.acos(a.dot(b)):-Math.acos(a.dot(b))
你能为你的程序提供一个输入/输出示例吗?我已经编辑了这篇文章。让我向你介绍-这是一种字面意义上的东西,它是如此的基本,但对mathy的每一件事情都至关重要,以至于大多数CPU甚至将其作为专用指令烘焙。好吧,你使用的是Java,所以我建议在API文档中查找
java.lang.Math.atan2
方法?如果您只想使用and
x和z
,那么您可以很好地完成这项工作
atan2
需要两个基于两个向量之间的差值的两个delta,在两个维度上。它不在乎你怎么称呼那些维度=)这是未经测试的代码,但是你可以做一些事情,比如看
asin
,看看它应该是正的还是负的
angle=Math.asin(a.dot(b))>=0?Math.acos(a.dot(b)):-Math.acos(a.dot(b))
你能为你的程序提供一个输入/输出示例吗?我已经编辑了这篇文章。让我向你介绍-这是一种字面意义上的东西,它是如此的基本,但对mathy的每一件事情都至关重要,以至于大多数CPU甚至将其作为专用指令烘焙。好吧,你使用的是Java,所以我建议在API文档中查找
java.lang.Math.atan2
方法?如果您只想使用and
x和z
,那么您可以很好地完成这项工作
atan2
需要两个基于两个向量之间的差值的两个delta,在两个维度上。它不在乎你怎么称呼这些维度=)