C++沿正弦曲线移动的圆圈,圆圈到达正弦曲线的尾部可以自动往回移动,半径由大变小,点击鼠标左键,圆圈停止移动,再点击一次,圆圈继续按照上一次的方向移动,点击鼠标右键,圆圈可以向反方向移动
时间: 2023-09-14 12:09:32 浏览: 92
c++编的正弦函数的曲线
3星 · 编辑精心推荐
好的,这是一个比较具体的问题,需要详细的代码实现。以下是一份实现此功能的 C++ 代码,供您参考:
```c++
#include <iostream>
#include <Windows.h>
#include <cmath>
using namespace std;
const int screen_width = 120;
const int screen_height = 40;
int main()
{
// 初始化
bool running = true;
bool paused = false;
bool reverse = false;
int x = 0, y = 0;
double angle = 0;
double radius = 10;
// 设置控制台窗口大小和标题
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT windowSize = { 0, 0, screen_width - 1, screen_height - 1 };
SetConsoleWindowInfo(hConsole, TRUE, &windowSize);
SetConsoleTitle(TEXT("Moving Circle"));
// 主循环
while (running) {
// 清空屏幕
system("cls");
// 计算圆圈的坐标
double sine = sin(angle);
x = (int)(screen_width / 2 + sine * radius);
y = (int)(screen_height / 2 + sine * radius / 2);
// 输出圆圈
for (int i = 0; i < screen_height; i++) {
for (int j = 0; j < screen_width; j++) {
if (i == y && j == x) {
cout << "O";
}
else {
cout << " ";
}
}
cout << endl;
}
// 更新角度和半径
double speed = 0.1;
if (!paused) {
angle += speed * (reverse ? -1 : 1);
}
if (angle > 2 * M_PI) {
angle -= 2 * M_PI;
}
else if (angle < 0) {
angle += 2 * M_PI;
}
if (radius > 1 && x == screen_width - 1 && !reverse) {
radius -= 0.5;
reverse = true;
}
else if (radius < 10 && x == 0 && reverse) {
radius += 0.5;
reverse = false;
}
// 处理鼠标输入
INPUT_RECORD inputRec;
DWORD events;
ReadConsoleInput(hConsole, &inputRec, 1, &events);
if (inputRec.EventType == MOUSE_EVENT) {
if (inputRec.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED) {
paused = !paused;
}
else if (inputRec.Event.MouseEvent.dwButtonState & RIGHTMOST_BUTTON_PRESSED) {
reverse = !reverse;
}
}
// 延时
Sleep(50);
}
return 0;
}
```
这个程序使用了 Windows API 中的一些函数,可以在控制台窗口中实现圆圈的移动。实现的方法是,通过正弦函数计算圆圈的纵坐标,然后根据纵坐标和屏幕宽度计算出圆圈的横坐标,最后在屏幕上输出圆圈。圆圈的半径会随着移动到屏幕边缘而改变,实现了“半径由大变小”的效果。通过读取鼠标输入,可以实现圆圈的暂停和反向移动。
阅读全文