当我的两个物体发生碰撞时,我希望其中一个物体撞到另一个物体。
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);
}
这里肯定有一些明显的错误 - 但我没有看到它,而且我已经工作了几个小时试图让这段代码发挥作用。
答案 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)
最终会有所帮助。
看看这个:
从您的评论中,您认为自己需要Ab。你没有。如果你只想反弹(这是一个很大的简化)你需要Ta和它的赞美。