我目前正在用Java开发一款游戏,我想根据所有游戏对象提供的水平和垂直速度来计算方向和方向速度。我想有一个像下面这样的方法来计算物体移动的方向/角度(基于它的水平和垂直速度);
public double getAngle() {
// Calculate angle/direction from the horizontal and vertical speed here
return angle;
}
当然,我需要一种类似的方法来根据物体的水平和垂直速度来计算物体的方向速度。
注意:当我问这个问题的时候,我没有学到任何关于几何/三角的知识,因为我在第二或第三节课上
Tim Visee的解决方案:
这是我在测试了一些东西后找到的解决方案。我做了三个函数,前两个可以用来计算垂直和水平速度的角度和速度。第三个函数可用于从角度和速度计算水平和垂直速度。
public static double getAngle(double vx, double vy) {
return Math.toDegrees(Math.atan2(vy, vx));
}
public static double getVelocityWithAngle(double vx, double vy) {
return Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2));
}
public static void angleVelocityToXYVelocity(double angle, double velocity) {
double vx = Math.cos(Math.toRadians(angle)) * velocity;
double vy = Math.sqrt(Math.pow(velocity, 2) - Math.pow(vx, 2));
System.out.println("vx: " + vx + " vy: " + vy);
}
请注意,第三个函数将结果打印到控制台中,因为它返回两个值。
我认为
angle = Math.toDegrees(Math.atan2(verticalSpeed,HorizontalSpeed) )
应该工作
从角度获取速度是不可能的。因为可以有多个垂直和水平速度值来给出相同的角度。