计算机器人在Java中移动的距离

时间:2016-08-17 23:00:56

标签: java function math

我正在研究一个需要我移动机器人的学校项目。机器人每秒移动的距离(变量t)由下面的函数计算。

Math Function

第一个功能很简单。第二个和第三个是我被卡住的地方。我怎么写F(t-1)?以下是我到目前为止的情况。

if (t == 0) {
    distance = 2;
} else if (t > 0 && <=6 || t > 12) {
    // No clue on how to write the 2nd distance equation.
} else if (t >= 7 && <=12) {
    // No clue on how to write the 3rd distance equation.
}

3 个答案:

答案 0 :(得分:5)

Recursion实际上没有必要解决这个问题。

请注意,在每个非零时间情况下,F(t) = F(t-1) + something

所以你可以这样做:

double f = 2;  /* Initial value at t=0 */
for (int t = 1; t <= maxT; ++t) {  // maxT is the maximum value of t.
  if (t <= 6 || t > 12) {
    f += /* something for case 2 */;
  } else {
    f += /* something for case 3 */;
  }
}
System.out.println(f);

可以通过递归执行此操作,但如果StackOverflowError变得适度大,您将获得maxT;相反,使用循环将适用于任意大maxT(模数浮点错误)。

正如@Andreas指出的那样,你可以在不循环t的所有值的情况下执行此操作:

double f = 2 * (maxT + 1);
for (int t = 7; t <= maxT && t <= 12; ++t) {
  f += log(t) - 2;
}

并且您可以通过预先计算值来消除该循环。

答案 1 :(得分:2)

这是一个涉及使用recursion的问题。总的来说,要密切关注 F t-1 的符号,因为这是指t-1对特定函数的评估。

我不会写出所有代码,但我会给你一些基础知识:

  • 当t = 0时,返回2 。这是你的基本情况。
  • 当t介于0到6 包含或大于12时,返回t-1处的函数评估并添加2.
  • 当t介于7到12 之间时,返回t-1处的函数评估并添加log 2 (t)。

至少可以让你开始朝着正确的方向前进。

public double evaluateDistance(int t) {
    if(t == 0) {
        return 2;
    } else if(t > 0 && t <= 6) || (t > 12) {
        // Think about this - it would involve another call to evaluateDistance, but what is t again?
    } else if(t >= 7 && t <= 12) {
        // Another evaluation involving the function.
        // For free, the change of base operation you'll need to get base-2 evaluation for the log:
        return ??? + Math.log(t)/Math.log(2);
    }
}

答案 2 :(得分:0)

想想我弄清楚了。对不起,如果我不清楚我需要什么,只需要弄清楚如何在函数中编写方程。我想我想通了。

    public double move()
{
    int t = 0;
    if(t == 0) // After the first second, robot moves 2
    {
        distance = 2;
    }
    else if(t > 0 && t <= 6 || t > 12) // From seconds 0 to 6 and after 12, robot moves distance equation
    {
        distance = (2*t)+2;
    }
    else if(t >= 7 && t <= 12) // From seconds 7 to 12, robot moves distances equation
    {
        distance = (2*t)+(Math.log(t)/Math.log(2));
    }
    position = position + distance;
    return position;
}

}