小编典典

一种以恒定速度沿线移动鸵鸟的有效算法

algorithm

问题:在笛卡尔坐标系(仅x,y)中以恒定速度沿直线移动对象。更新速度不稳定。移动速度必须接近精确值,并且物体必须非常接近目的地。线路的来源和目的地可能在任何地方。

给定:源地址和目标地址(x0,x1,y0,y1),以及任意值的速度。

顺便说一句:SO对此有一个答案,这很好,但是它假定给出了旅行的总时间。

这是我得到的: ``

x0 = 127;
y0 = 127;
x1 = 257;
y1 = 188;
speed = 127;
ostrich.x=x0 //plus some distance along the line;
ostrich.y=y0 // plus some distance along the line;
//An arbitrarily large value so that each iteration increments the distance a minute amount
SPEED_VAR = 1000; 
xDistPerIteration = (x1 - x0) / SPEED_VAR;
yDistPerIteration = (y1 - y0) / SPEED_VAR;
distanceToTravel = ;//Pythagorean theorum
limitX =  limit1 = 0; //determines when to stop the while loop

//get called 40-60 times per second
void update(){
  //Keep incrementing the ostrich' location
  while (limitX < speed && limitY < speed) {
    limitX += Math.abs(xDistPerIteration);
    limitY += Math.abs(yDistPerIteration);
    ostrich.x += xDistPerIteration;
    ostrich.y += yDistPerIteration;
  }
  distanceTraveled -= Math.sqrt(Math.pow(limitX, 2) + Math.pow(limitY, 2));
  if (distanceTraveled <=0)
    //ostrich arrived safely at the factory
}

该代码可以完成工作,但是在占用大量CPU的程序中,它仅占用程序时间的18%。就程序和性能而言,这是垃圾。有什么想法在这里做什么?


阅读 272

收藏
2020-07-28

共1个答案

小编典典

顺便说一句:SO对此有一个答案,这很好,但是它假定给出了旅行的总时间。

救援基本物理学

花费的总旅行时间=距离/速度

顺便说一句Math.hypot(limitX,limitY)Math.sqrt(Math.pow(limitX, 2) + Math.pow(limitY, 2))

虽然实际上是while循环中您应该重构

2020-07-28