c++小球反弹可视化
要实现小球反弹的可视化,您可以使用C++中的图形库,如SFML或SDL,来绘制小球并模拟其反弹的过程。以下是使用SFML库实现小球反弹可视化的示例代码:
#include <SFML/Graphics.hpp>
#include <iostream>
using namespace std;
int main() {
double windowHeight = 600; // 窗口高度
double windowWidth = 800; // 窗口宽度
double initialHeight; // 初始高度
int numBounces; // 反弹次数
cout << "请输入小球的初始高度(米):";
cin >> initialHeight;
cout << "请输入小球的反弹次数:";
cin >> numBounces;
double totalDistance = initialHeight; // 总距离
double distance = initialHeight; // 当前弹跳的距离
sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), "小球反弹可视化");
sf::CircleShape ball(20); // 创建小球形状
ball.setFillColor(sf::Color::Red); // 设置小球颜色
ball.setPosition(windowWidth / 2, windowHeight - initialHeight); // 设置小球初始位置
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
// 绘制小球
window.draw(ball);
// 更新小球位置
distance /= 2;
totalDistance += distance * 2;
ball.move(0, -distance);
// 判断小球是否触底反弹
if (ball.getPosition().y + 2 * ball.getRadius() >= windowHeight) {
distance *= -1; // 反弹
numBounces--; // 反弹次数减少
// 当所有反弹次数完成后,结束循环
if (numBounces <= 0) {
window.close();
break;
}
}
window.display();
}
cout << "小球在" << numBounces << "次反弹后的总共移动距离为:" << totalDistance << " 米" << endl;
return 0;
}