Язык программирования:
C/C++
Среда программирования:
Microsoft Visual C++ 2010 Express
#include "stdafx.h" #include <glut.h> #include <stdio.h> #include <math.h> void Initialize(){ //Выбрать фоновый (очищающий) цвет glClearColor(1.0,1.0,1.0,1.0); //Установить проекцию glMatrixMode(GL_PROJECTION); // обнуление трансформации (обнуляем матрицу) glLoadIdentity(); glOrtho(0.0,100.0,0.0,100.0,-100.0,100.0); } double i, j; double tmp=2;//параметр, на который увеличиваем радиус круга int k=0;//переменная, которая определяет увеличение/уменьшение круга double PI=3.14; void circle(double xc, double yc, double r, int color){//функция, рисующая круг glBegin(GL_TRIANGLE_FAN); double ang=0;//угол if (color==0) glColor3f(0.0,0.0,0.0);//задаем нужный цвет if (color==1) glColor3f(1.0,0.0,0.0); for (int t=0; t<100; t++){ ang=2*PI*t/100; glVertex2d(xc+r*cos(ang),yc+r*sin(ang)); } glEnd(); } void RedCircles(double rad){//рисуем красные круги for (j=-14; j<=130; j+=16){ for (i=-6; i<=130; i+=8){ circle(i,j,rad,1); } } for (j=-6; j<=138; j+=16){ for (i=-2; i<=134; i+=8){ circle(i,j,rad,1); } } } void BlackCircles(double rad){//рисуем черные круги for(j=-9; j<=135; j+=16){ for (i=-6; i<=130; i+=8){ circle(i,j,rad,0); } } for (j=-1; j<=129; j+=16){ for (i=-2; i<=134; i+=8){ circle(i,j,rad,0); } } } void Draw(){//основная функция glClear (GL_COLOR_BUFFER_BIT); BlackCircles(2.1-tmp);//вызываем функцию отрисовки черных кругов, передавая нужный радиус RedCircles(2.1+tmp);//вызываем функцию отрисовки красных кругов, передавая нужный радиус glutSwapBuffers(); // Отрисовка из буффера glFlush(); } int A=0; void Timer(int value){ // ф-ия таймера ++A; if(tmp>=-2 && k==0) tmp-=0.2;//уменьшаем радиус круга if(tmp<-2){ k=1; tmp=-2;} if (tmp<=2 && k==1) tmp+=0.2;//увеличиваем радиус круга if (tmp>2){ k=0; tmp=2;} glutDisplayFunc(Draw);// вызываем ф-ию Draw glutPostRedisplay(); // ф-ия перерисовки окна glutTimerFunc(70, Timer, 1); // снова вызываем ф-ию таймера через 70 мили секунд } int main(int argc, char **argv) { // войти в главный цикл // инициализация GLUT и создание окна glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(200,100); //Позиция окна glutInitWindowSize(500,500); // размер окна glutCreateWindow("Красные и черные точки"); // имя окна // очистка буфера цвета и глубины (очищаем экран) glClear (GL_COLOR_BUFFER_BIT); Initialize(); // регистрация обратных вызовов glutDisplayFunc(Draw); //вызов ф-ии Draw glutTimerFunc(1000, Timer, 1); // вызов ф-ии таймера glutMainLoop(); //программы GLUT входят в цикл обработки сообщений функцией glutMainLoop() return 1; }
Прикрепленный файл | Размер |
---|---|
Kursaitova Asie Red&black.zip | 1.09 Мб |