Java 为什么我的物体朝着错误的方向移动?

Java 为什么我的物体朝着错误的方向移动?,java,collision,Java,Collision,当我的两个物体碰撞时,我希望其中一个物体推动另一个物体 while (checkCollision(this, cl)){ //cl is referring to the other entity, non-cl things my entity double an = Assist.angle(new Vector3f(cl.z, 0, cl.x),

当我的两个物体碰撞时,我希望其中一个物体推动另一个物体

while (checkCollision(this, cl)){ 
//cl is referring to the other entity, non-cl things my entity
                        double an = Assist.angle(new Vector3f(cl.z, 0, cl.x),
                                                 new Vector3f(z, 0, x)); 
                        double moveZ = Math.cos(Math.toRadians(an));
                        double moveX = Math.sin(Math.toRadians(an));
                        cl.z += moveZ;
                        cl.x += moveX;
                    }
checkCollision()
方法工作得非常好,可以检测我的两个对象(在本例中为3D舰船)是否发生碰撞

然后我得到另一个物体和当前物体之间的角度,然后利用这个角度,我推开另一个物体。然而,它不起作用

另一个对象似乎总是被推向+x方向,Z似乎没有任何严格的模式,但也不能正常工作

以下是我计算角度的方法(
Assist.angle()
):

这里肯定有什么明显的错误,但我没有看到,我已经花了好几个小时试图让代码正常工作。

Math.atan2()
采用矢量线,而不是角度、弧度或其他。它返回的是弧度

出于历史原因,我们愚蠢地进入了
Math.atan2()
expected
y
之前的
x

另外,我不认为最后的
Math.abs(so)
有什么帮助

看看这个:


从你的评论来看,听起来你认为你需要Ab,但你不需要。如果你只是想振作起来(这是一个巨大的简化),你需要助教,这是一种恭维

我以为我把向量坐标放进去了?我肯定会在使用后把它转换成度数。我已经在
Math.atan2()
上反转了Z和X函数,但是它似乎并没有解决这个问题。@Joehot200请解释为什么向量坐标需要从度转换为弧度,而这种转换是针对角度的。我已经在概述中发布了新代码。结果完全一样。我现在非常非常困惑。然而,它似乎确实起了作用。即使之前的代码不是?我很困惑。不管怎样,如果我还有什么问题,我会回来找你的——谢谢你的帮助和有用的信息!哦,我现在有点了解这个问题了。尽管你说已经修复了它,但我有一个冻结问题,冻结了游戏,使它看起来不起作用,然后当游戏解冻时,我的船在另一艘船的另一边(穿过了它),导致另一艘船似乎移动错误。几个问题:为什么是z而不是y?角度应该计算什么角度?标题?弓上的角度?@CandiedOrange,因为Y指向上方。我不在乎向上。这个角度是用来计算object2在看object1时必须面对的角度。向上是指在北方,还是向上是指在向上?@CandiedOrange它现在不是很相关,但我正在制作一个3D游戏。在3D中,X始终为北/南,Y始终为上/下,Z始终为左/右。是的,但我在StackOverflow上,所以我不相信人们会遵守约定:)
public static double angle(Vector3f vec1, Vector3f vec2){
    double so = Math.toDegrees(Math.atan2(((vec1.z) - vec2.z), ((vec1.x) - vec2.x)));
    return Math.abs(so);
}