Java:水平和垂直运动比对角线运动更快

时间:2013-11-23 20:08:20

标签: java math angle

我最近计算了一些实体以中心的一个特定实体为目标,我用这个函数来决定他们去哪个方向:

double xa = 0, ya = 0;

double targetX = mother.getX();
double targetY = mother.getY();

double deltaX = targetX - x;
double deltaY = targetY - y;
double speed = 0.5d;
double dir = Math.atan2(deltaY, deltaX);

xa += (speed * Math.cos(dir));
ya += (speed * Math.sin(dir));

从那时起,移动diagonally的实体移动速度比直接移动verticallyhorizontally的实体慢一点。我怎么能重新计算这个以便它们以相同的速度移动?

1 个答案:

答案 0 :(得分:0)

您的代码看起来是正确的。连续(xaxb)之间的距离应始终完全相同。

你是否只是在一个没有延迟或定时器的循环中运行这个平板?也许正在发生的事情是atan2被优化以在其一个参数为零(垂直和水平情况)时更快地计算,因此它将更快地绕过循环。

我建议您使用Timer.html#scheduleAtFixedRate来确保您的迭代持续时间相等,将代码放在TimerTask内。