在坐标之间移动,Java算法

时间:2010-02-15 21:54:39

标签: java algorithm coordinates distance

好的,这个问题有点抽象。

我有一个沿着一条线移动的图标,该图标由一系列存储在矢量中的坐标表示,我正在迭代它们。坐标之间的距离是可变的。因此,有时图标会缓慢而平稳地移动,而有些图标会一次跳几个像素。

我无法想出一个算法来分割它必须在一组相对坐标之间移动的算法,其中数字基于大小,因此无论有多少个共同点,转换都是平滑的。在一条线上。

任何想法都会非常感激。谢谢:))

3 个答案:

答案 0 :(得分:2)

看一下Main Game Loop的讨论。

以下是该页面的引用:

  

在此步骤中,更新所有   游戏世界中的物体是   计算和执行。通常,a   时间步长值传递给所有   更新方法表明了多少   自上次更新以来已经过去了   ...

你需要知道3件事:

  • 自上次更新对象位置以来经过了多长时间?
  • 你物体的移动速度是多少?
  • 你的物体移动的方向(通常表示为雷)是什么?

通过这些,您可以计算对象的当前位置。

答案 1 :(得分:1)

如果你想让物体以恒定速度移动,我会建议一个基于时间的模型,你的物体实际上以一定的速度(像素/秒)移动。如果沿曲线(例如catmull-rom曲线)进行样条曲线,您仍然可以使其击中每个点(ish)。

答案 2 :(得分:0)

所以你想沿着一条线从一个初始点(x0 / y0)移动到一个终点(x1 / y1),步数可变,但每步的距离最大?

这可以通过以下方式完成:

int stepdist = 10; // max pixels per step
double xdiff = x1 - x0;
double ydiff = y1 - y0;
double dist = sqrt( xdiff * xdiff + ydiff * ydiff );
int steps = (int) ( ( dist - 1 ) / stepdist );
if( steps > 0 )
{
   xdiff /= steps;
   ydiff /= steps;
   while( --steps >= 0 )
   {
       x0 += xdiff;
       y0 += ydiff;
       moveTo( (int) x0, (int) y0 );
   }
}
moveTo( (int) x1, (int) y1 );