用c++代码写一个动态的红色爱心
时间: 2023-08-22 20:03:26 浏览: 175
以下是用C++和OpenGL实现一个动态的红色爱心的代码:
```c++
#include <iostream>
#include <cmath>
#include <GL/glut.h>
// 窗口大小
const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
// 爱心的颜色
GLfloat red[3] = {1.0, 0.0, 0.0};
// 爱心的位置和大小
GLfloat x = -1.0, y = -0.8, size = 0.1;
// 爱心的动画时间
GLfloat t = 0.0;
// 绘制函数
void draw(void)
{
glClear(GL_COLOR_BUFFER_BIT);
// 绘制爱心
glBegin(GL_POLYGON);
for (int i = 0; i <= 360; i++)
{
GLfloat angle = i * M_PI / 180.0;
GLfloat x = size * 16.0 * pow(sin(angle), 3.0);
GLfloat y = -size * (13.0 * cos(angle) - 5.0 * cos(2.0 * angle) - 2.0 * cos(3.0 * angle) - cos(4.0 * angle));
glColor3fv(red);
glVertex2f(x, y);
}
glEnd();
glutSwapBuffers();
}
// 更新函数
void update(int value)
{
t += 0.01;
// 计算爱心的位置和大小
x = -0.8 + 0.2 * sin(t);
y = -0.8 + 0.2 * cos(t);
size = 0.1 + 0.05 * sin(t);
glutPostRedisplay();
glutTimerFunc(16, update, 0);
}
// 主函数
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
glutCreateWindow("Dynamic Heart");
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.2, 1.2, -1.2, 1.2);
glutDisplayFunc(draw);
glutTimerFunc(0, update, 0);
glutMainLoop();
return 0;
}
```
在终端中编译并运行:
```
g++ -o dynamic_heart dynamic_heart.cpp -lglut -lGLU -lGL
./dynamic_heart
```
即可看到一个动态的红色爱心。
阅读全文