Java Turtle 一次移动/转动 1 像素/度。到目前为止还不错,但我错过了一些东西?

问题描述 投票:0回答:1

乌龟可以每秒1°的速度旋转。海龟移动的速度是每秒单位距离(“1 像素”)。海龟不能同时移动和旋转。同时,为了仍然能看到路,乌龟只向前移动(即,它不转动)。设 C 为坐标 [x,y] 处的点。第一只乌龟到达 C 点的最短时间是多少秒?请记住,乌龟可以顺时针和逆时针旋转。

将 timeToArrival 方法添加到 TurtlesWorld 类中。 timeToArrival 方法采用 2 个参数 x、y(C 点的坐标),并返回任何海龟可以到达 C 点的最小时间(以秒为单位)。

问题是,当我将其粘贴到课程评估器中检查时,值会有所不同

到目前为止,我将方法定义为:

  1. 在海龟阵列中循环
  2. 获取他们到该点的距离和角度
  3. 如果角度大于180(通过另一种仅取顺时针角度的方法来取角度) 然后将角度更改为角度= 360 - 角度;
  4. 由于它的旋转和移动一次为 1 秒,因此为 1:1,因此我们将所需的旋转和距离添加到所用时间
  5. 我们比较时间来找出每次最短的时间
  6. 返回最佳时间

我觉得我的想法有谬误,但又无法直接指出 是第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;
    }
java intellij-idea turtle-graphics
1个回答
0
投票

如果海龟是全息图,那么你的思维过程看起来不错。但是,如果它们是物理存在并且不能同时位于同一点,那么您需要检查碰撞。您应该考虑是否所有海龟都向该点移动,还是仅向最近的海龟移动,并且您将需要计算每只海龟的每一步,并避免在预测的每个时刻发生碰撞(如果发生碰撞)。否则,如果我们忽略海龟碰撞,那么是的,每次的时间是 (turn_steps + moving_steps) 秒,并且您正在寻找最小值。当然,乌龟应该先转动,然后移动。如果转弯超过 180 秒,则方向错误,乌龟需要转向相反的方向。

© www.soinside.com 2019 - 2024. All rights reserved.