为什么我的物体朝错误的方向移动?
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()
期望 y
在 x
之前。
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2(double,%20double)
我也不认为最后的 Math.abs(so)
有任何帮助。
看看这个:
从您的评论来看,您似乎认为自己需要 Ab。你不知道。如果你只是想振作起来(这是一个很大的简化),你需要 Ta,这是一种赞美。
当我的两个物体发生碰撞时,我希望其中一个能推动另一个。
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()
期望 y
在 x
之前。
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2(double,%20double)
我也不认为最后的 Math.abs(so)
有任何帮助。
看看这个:
从您的评论来看,您似乎认为自己需要 Ab。你不知道。如果你只是想振作起来(这是一个很大的简化),你需要 Ta,这是一种赞美。