Язык программирования:
C/C++
Среда программирования:
Visual Studio 2013
#include <glut.h> #include <math.h> #include <stdlib.h> #include <iostream> using namespace std; int t = 500;//кол-во сторон float x, y;//координаты float angle;//параметр отвечающий за движение //сохранение пропорций void proporsion(int w, int h) { if (h == 0) { h = 1; } float ratio = float(w) / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, ratio, 500, 500); glMatrixMode(GL_MODELVIEW); } //рисование void paint(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// очистка буфера //круг 1 glBegin(GL_POLYGON);//рисуем полигон glColor3ub(0, 0, 0);//цвет for (int i = 0; i <= t; i++) { float a = (float)i / t * 3.1415 * 2; x = sin(a) * 4; y = cos(a) * 4; glVertex2f(x, y); } glEnd(); //круг 2 glPushMatrix(); glRotatef(angle, 0, 0, 1);//вращение glBegin(GL_POLYGON); glColor3ub(255, 255, 255); for (int i = 0; i <= t; i++) { float a = (float)i / t * 3.1415 * 2; x = sin(a) * 2; y = cos(a) * 2 + 2; glVertex2f(x, y); } glEnd(); glPopMatrix(); //круг 3 glPushMatrix(); glRotatef(angle, 0, 0, 1); glBegin(GL_POLYGON); glColor3ub(0, 0, 0); for (int i = 0; i <= t; i++) { float a = (float)i / t * 3.1415 * 2; x = sin(a); y = cos(a) + 3; glVertex2f(x, y); } glEnd(); glPopMatrix(); //круг 4 glPushMatrix(); glRotatef(angle, 0, 0, 1); glBegin(GL_POLYGON); glColor3ub(255, 255, 255); for (int i = 0; i <= t; i++) { float a = (float)i / t * 3.1415 * 2; x = sin(a) / 2; y = cos(a) / 2 + 3.5; glVertex2f(x, y); } glEnd(); glPopMatrix(); //круг 5 glPushMatrix(); glRotatef(angle, 0, 0, 1); glBegin(GL_POLYGON); glColor3ub(0, 0, 0); for (int i = 0; i <= t; i++) { float a = (float)i / t * 3.1415 * 2; x = sin(a) / 4; y = cos(a) / 4 + 3.75; glVertex2f(x, y); } glEnd(); glPopMatrix(); //круг 6 glPushMatrix(); glRotatef(angle, 0, 0, 1); glBegin(GL_POLYGON); glColor3ub(255, 255, 255); for (int i = 0; i <= t; i++) { float a = (float)i / t * 3.1415 * 2; x = sin(a) / 8; y = cos(a) / 8 + 3.9; glVertex2f(x, y); } glEnd(); glPopMatrix(); //круг 7 glPushMatrix(); glRotatef(angle, 0, 0, 1); glBegin(GL_POLYGON); glColor3ub(0, 0, 0); for (int i = 0; i <= t; i++) { float a = (float)i / t * 3.1415 * 2; x = sin(a) / 16; y = cos(a) / 16 + 3.95; glVertex2f(x, y); } glEnd(); glPopMatrix(); glutSwapBuffers(); } //установка таймера void Timer(int) { angle += 0.5;//вращение glutTimerFunc(15, Timer, 0);//обновлять экран каждые 15мсек glutPostRedisplay(); } int main(int argc, char **argv) { // инициализация glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//double: буфер рисвания и буф сторонних вычислений glutInitWindowPosition(100, 100);//позиция окна glutInitWindowSize(500, 500);//размеры окна glutCreateWindow("окружности");//название окна glClearColor(1.0, 1.0, 1.0, 1.0);//цвет окна glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);//установка границ glutDisplayFunc(paint);//вызов функции рисования glutReshapeFunc(proporsion);//вызов функции сохранения пропорций glutTimerFunc(0, Timer, 0);//вызов таймера glutMainLoop();//основной цикл return 1; }
Прикрепленный файл | Размер |
---|---|
Al_Andari_Dvigenie_krugov.zip | 986.96 кб |