C++沿正弦曲线移动的圆圈,圆圈到达正弦曲线的尾部可以自动往回移动,半径由大变小,点击鼠标左键,圆圈停止移动,再点击一次,圆圈继续按照上一次的方向移动,点击鼠标右键,圆圈可以向反方向移动
时间: 2023-09-14 13:09:32 浏览: 172
好的,这个问题需要使用 C++ 实现,需要使用一些基本的数学函数和图形库。以下是一个简单的实现:
```cpp
#include <graphics.h>
#include <math.h>
int main()
{
// 初始化图形界面
initgraph(640, 480);
// 初始圆心坐标
int x = 100, y = 240;
// 初始圆半径
int r = 50;
// 初始运动方向和速度
double direction = 0, speed = 5;
// 标记是否停止和反向运动
bool stopped = false, reversed = false;
while (true) {
// 清空屏幕
cleardevice();
// 绘制正弦曲线
for (int i = 0; i < 640; i++) {
int j = 240 + 50 * sin(i * 0.1);
putpixel(i, j, WHITE);
}
// 计算圆心坐标
if (!stopped) {
if (x + r >= 640) {
// 到达右边界,反向运动
direction = M_PI - direction;
reversed = true;
} else if (x - r <= 0) {
// 到达左边界,反向运动
direction = M_PI - direction;
reversed = true;
} else if (y + r >= 480) {
// 到达下边界,反向运动
direction = -direction;
reversed = true;
} else if (y - r <= 0) {
// 到达上边界,反向运动
direction = -direction;
reversed = true;
}
if (!reversed) {
// 正向运动
x += int(speed * cos(direction));
y += int(speed * sin(direction));
} else {
// 反向运动
x += int(speed * cos(direction));
y += int(speed * sin(direction));
r -= 2;
if (r < 10) {
// 缩小到最小,重新开始正向运动
r = 50;
direction = M_PI + direction;
reversed = false;
}
}
}
// 绘制圆
setcolor(YELLOW);
circle(x, y, r);
// 处理鼠标事件
if (ismouseclick(WM_LBUTTONDOWN)) {
// 左键点击,停止或继续运动
stopped = !stopped;
clearmouseclick(WM_LBUTTONDOWN);
} else if (ismouseclick(WM_RBUTTONDOWN)) {
// 右键点击,改变运动方向
direction = M_PI + direction;
reversed = !reversed;
clearmouseclick(WM_RBUTTONDOWN);
}
// 刷新屏幕
delay(10);
flushmouse();
}
// 关闭图形界面
closegraph();
return 0;
}
```
该程序使用了 `graphics.h` 图形库,需要安装并配置好 Dev-C++ 等开发环境才能正常编译运行。程序实现了一个圆沿正弦曲线运动的动画效果,支持鼠标左键暂停或继续运动,鼠标右键改变运动方向。
阅读全文