Среда программирования:
Microsoft Visual Studio 2013
Статья по теме:
При запуске программы открывается окно, в котором рисуется искомый фрактал.
Код программы:
#define GL_GLEXT_PROTOTYPES #include <windows.h> #include <GL/gl.h> #include <glut.h> #include <GL/glu.h> #include <math.h> /* Обьявление функции, которая будет рисовать фрактал */ void func(double x, double y, double angle, double len, int deph); /* Функция, прорисовывающая изображение в окне */ void display(void){ /* Очистка экрана цветом по-умолчанию */ glClear(GL_COLOR_BUFFER_BIT); /* Задание цвета для рисования */ glColor3f(1.0f, 0.2f, 0.5f); /* Начало рисования. Вершины 2n и 2n+1 будут обьединены в линию*/ glBegin(GL_LINES); /* Вызов функции, рисующей фрактал. В функции передаются вершины в буфер */ func(50, 50, 1.1, 50, 12); /* Функция, выгружающая буфер в сцену */ glEnd(); /* Прорисовка текущего буфера */ glFlush(); } /* Функция, определённая выше */ void func(double x, double y, double angle, double len, int deph){ double angp = 0.5; //изменение угла for (int i = -1; i<5; i += 2){ //если не достигнута глубина рекурсии - продолжить построение фрактала if (deph>0) func(x + cos(angle + i*angp)*len / 2, y + sin(angle + i*angp)*len / 2, angle + i*angp, len / 2, deph - 1); /* В буфер записываются вершины. Эти две вершины будут соединены в прямые между собой*/ glVertex2d(x, y); glVertex2d(x + cos(angle + i*angp)*len / 2, y + sin(angle + i*angp)*len / 2); } } void init(void){ /* Установка цвета по-умолчанию */ glClearColor(0.0, 0.0, 0.0, 0.0); /* Задаются параметры сцены. Матрица преобразований для проекции, координаты сдвигаются в 0 и границы экрана устанавливаются в заданные*/ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 100.0, 0.0, 100.0, -100.0, 100.0); } /* Позволяет закрыть программу нажатием клавиши "эскейп" */ void processNormalKeys(unsigned char key, int x, int y) { if (key == 27) exit(0); } int main(int argc, char** argv){ /* Инициализируются буферы для glut-a*/ glutInit(&argc, argv); /* Задаются режимы смешивания цветов и количество буферов*/ glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /* Задаётся размер окна 500 на 500*/ glutInitWindowSize(500, 500); /* Окно сдвигается на 100 единиц по икс и по игрек */ glutInitWindowPosition(100, 100); /* Создаётся окно с названием, размером и смещениями, которые были указаны */ glutCreateWindow("Fractal"); /* Вызывается функция инициализации, задания начальных параметров */ init(); /* Устанвливается фукция прорисовки, переданная как параметр */ glutDisplayFunc(display); /* Задаётся функция, которая будет обрабатывать нажатия клавиш*/ glutKeyboardFunc(processNormalKeys); /* Начинается выполнение прорисовки и обработка клавиш*/ glutMainLoop(); return 0; }
Прикрепленный файл | Размер |
---|---|
Pifagor.zip | 166.29 кб |