乌龟可以每秒1°的速度旋转。海龟移动的速度是每秒单位距离(“1 像素”)。海龟不能同时移动和旋转。同时,为了仍然能看到路,乌龟只向前移动(即,它不转动)。设 C 为坐标 [x,y] 处的点。第一只乌龟到达 C 点的最短时间是多少秒?请记住,乌龟可以顺时针和逆时针旋转。
将 timeToArrival 方法添加到 TurtlesWorld 类中。 timeToArrival 方法采用 2 个参数 x、y(C 点的坐标),并返回任何海龟可以到达 C 点的最小时间(以秒为单位)。
问题是,当我将其粘贴到课程评估器中检查时,值会有所不同
到目前为止,我将方法定义为:
我觉得我的想法有谬误,但又无法直接指出 是第3步还是第4步?考虑到它是距离和度数的十进制数
public double timeToArrival (double x, double y){
double angTo;
double distTo;
double time = 0;
double bestTime = Double.MAX_VALUE;
for(int i = 0; i < this.turtles.length; i++){
this.turtles[i].setDirection(0);
this.turtles[i].penDown();
angTo = this.turtles[i].directionTowards(x,y);
distTo = this.turtles[i].distanceTo(x, y);
// angle integer is arbitrary because I had the turtles move to see whether they reach the point (they do)
int angle = 1;
if(angTo > 180){
angTo = 360 - angTo;
angle = -1;
}
time += angTo + disTo;
if(time < bestTime){
bestTime = time;
}
time = 0;
}
return bestTime;
}
如果海龟是全息图,那么你的思维过程看起来不错。但是,如果它们是物理存在并且不能同时位于同一点,那么您需要检查碰撞。您应该考虑是否所有海龟都向该点移动,还是仅向最近的海龟移动,并且您将需要计算每只海龟的每一步,并避免在预测的每个时刻发生碰撞(如果发生碰撞)。否则,如果我们忽略海龟碰撞,那么是的,每次的时间是 (turn_steps + moving_steps) 秒,并且您正在寻找最小值。当然,乌龟应该先转动,然后移动。如果转弯超过 180 秒,则方向错误,乌龟需要转向相反的方向。