c++逻辑问题
C++ Logic Issue
我试图写一个简单的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);
),但你在积累。
所以你可能想要赋值而不是增加你的distance
和height
变量:
distance = velocity * cos(angle) * time;
height = (velocity * sin(angle) * time) - (gravity * pow(time, 2) ) / 2;
接下来,您可能想要检查行进的distance
是否超过了到墙壁的距离(与float
s相等是非常不可能的,而且不准确)。
一些文体上的建议:把这些方程放到它们自己的函数中
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题