直接从A点移动到B点

时间:2012-02-18 10:43:03

标签: java geometry

我得到了x和y(我的位置)以及destination.x和destination.y(我想要的地方)。这不是用于家庭作业,仅用于培训。

所以我已经做的是

float x3 = x - destination.x;
float y3 = y - destination.y;

float angle = (float) Math.atan2(y3, x3);
float distance = (float) Math.hypot(x3, y3);

我有角度和距离,但不知道如何让它直接移动。 请帮忙! 谢谢!

3 个答案:

答案 0 :(得分:1)

也许使用这将有助于

float vx = destination.x - x;
float vy = destination.y - y;
for (float t = 0.0; t < 1.0; t+= step) {
  float next_point_x = x + vx*t;
  float next_point_y = y + vy*t;
  System.out.println(next_point_x + ", " + next_point_y);
}

现在你有了线上点的坐标。根据需要选择足够小的步骤。

答案 1 :(得分:1)

要从给定角度计算速度,请使用:

velx=(float)Math.cos((angle)*0.0174532925f)*speed;
vely=(float)Math.sin((angle)*0.0174532925f)*speed;

* speed =你的速度:)(使用数字来看看什么是正确的)

答案 2 :(得分:1)

我建议您独立计算机芯的x和y分量。 使用三角函数可以显着降低程序速度。

解决问题的简单方法是:

float dx = targetX - positionX;
float dy = targetY - positionY;

positionX = positionX + dx;
positionY = positionY + dy;

在此代码示例中,您计算​​从您的位置到目标的x和y距离 然后你一步一步地移动到那里。

你可以应用一个时间因子(&lt; 1)并多次进行计算,使它看起来像你的物体正在移动。

请注意,+和 - 比cos()sin()等快得多。