c++逻辑问题

C++ Logic Issue

本文关键字:问题 c++      更新时间:2023-10-16

我试图写一个简单的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 Heightn";
    cin >> height;
    cout << "Set target heightn";
    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 walln";
    }
    return 0;
}

最终的if语句if( distance == width )不测试距离是否超过了宽度。你可能需要if( distance >= width )。在你的移动循环中似乎没有任何距离的测试,所以距离很容易大于宽度,从而导致你的if不为真。

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

我会进一步建议你需要球在"房间"中弹跳的宽度和宽度。所以,你总共需要球的X, Y, Z坐标。

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

所以你可能想要赋值而不是增加你的distanceheight变量:

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

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

一些文体上的建议:把这些方程放到它们自己的函数中