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

Why is my object moving in the wrong direction?

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

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()):

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);
}

这里肯定有明显的错误 - 但我没有看到它,我已经工作了几个小时试图让这段代码工作。

Math.atan2() 采用矢量线而不是角度、弧度或其他方式。 returns 的单位是弧度。

出于历史原因,愚蠢地进入 Math.atan2() 期望 yx 之前。

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2(double,%20double)

我也不认为最后的 Math.abs(so) 有任何帮助。

看看这个:

从您的评论来看,您似乎认为自己需要 Ab。你不知道。如果你只是想振作起来(这是一个很大的简化),你需要 Ta,这是一种赞美。