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

时间:2015-04-04 22:37:03

标签: 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),
                                                 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船只)是否发生了碰撞。

然后我获得另一个物体和我当前物体之间的角度,然后使用该角度,我推开另一个物体。但是 - 它不起作用。

另一个物体似乎总是向+ d方向推,而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);
}

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

1 个答案:

答案 0 :(得分:2)

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

由于历史原因,在Math.atan2()之前进入y预期x是愚蠢的。

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

此外,我并不认为Math.abs(so)最终会有所帮助。

看看这个:

enter image description here

从您的评论中,您认为自己需要Ab。你没有。如果你只想反弹(这是一个很大的简化)你需要Ta和它的赞美。