C ++逻辑问题

时间:2013-06-01 16:45:48

标签: c++

我正在尝试编写一个简单的c ++程序,一旦遇到特定点就会输出对象的当前高度。我想要完成的目标是你有一个物体,它从一个不同的位置开始,随着重力附着在一个随机的速度下移动。如果球与墙壁或其他物体碰撞,它应向后移动,没有能量损失,但仍然会因重力而继续下落。一旦球到达特定高度,输出该值。

现在,我正在努力做的就是检查我的球是否超出了我的宽度范围。但是对于我的生活,我不明白为什么我最后的if语句不会打电话。

我是否缺少/做一些非常愚蠢的事情?

  int _tmain(int argc, _TCHAR* argv[])
{

    float velocity;
    float height, targetHeight;
    float gravity;
    float time;
    float angle;
    float width;
    float move;
    float distance; 

    gravity = 9.80f;
    time = 0;
    distance = 0;

    cout << "Set Height\n";
    cin >> height;

    cout << "Set target height\n";
    cin >> targetHeight;

    cout << "Set Angle ( 0 - 90 ): \n";
    cin >> angle;
    angle *= 3.14 * 180; // convert to radians

    cout << "Set velocity (0 - 100): \n";
    cin >> velocity;

    cout << "Set Play field Width: \n";
    cin >> width;


    while( height >= target  )
    {
        time++;
        distance += velocity * cos(angle) * time;
        height += (velocity * sin(angle) * time) - (gravity * pow(time, 2) ) / 2;
    }

    if( distance == width)
    {
            cout << "You've hit the wall\n";
    }

    return 0;
}

3 个答案:

答案 0 :(得分:3)

您的最终if声明if( distance == width )不会测试距离是否超出宽度。你可能想要if( distance >= width )。似乎没有对你的运动循环内行进的距离进行任何测试,因此距离可能很容易大于宽度,从而导致你的情况不真实。

答案 1 :(得分:1)

以相同的速度向后移动:velocity = -velocity;。当然,如果它向后移动,它可能会碰到另一面墙,所以你可能也想查看distance == 0;。 (因为它是浮点数,我还建议你使用>=<=而不是精确的比较,或者你可能会发现球是一个微米过去的墙,然后继续直到它击中太阳,或者你的数学用完了,或者如果你永远继续下去就会发生其他事情。)

我会进一步建议您需要球在其中弹跳的“房间”的宽度和宽度。因此,总共需要球的X,Y和Z坐标。

答案 2 :(得分:1)

注意:你的时间有所增加,这意味着高度和距离的直接公式(一个说distance = f(time);),但你正在积累。

所以你可能希望分配而不是增加你的distanceheight变量:

   distance = velocity * cos(angle) * time;
   height = (velocity * sin(angle) * time) - (gravity * pow(time, 2) ) / 2;

接下来,您可能想要检查行进的distance 是否超过到墙的距离(与float的相等是非常不可能的,加上不准确)。

一些风格建议:将这些方程式放在自己的函数中。