Новый сайт по новому адресу ignatiev.su - Игнатьев Иван
Если вы что-то искали и не нашли, или у вас возникли вопросы, пишите на e-mail: ivan@ignatiev.su

Новый блог по адресу Блог об ИТ и программировании на русском. Если вы хотите, чтобы я обновил, какие-либо статьи, пожалуйста напишите мне на email.


Досовская красота, рекурсия в графике

Сегодня вдохновленный воспоминаниями, решил сделать небольшую красивую программку на Turbo C++ 3.0 рисующую рекурсивную снежинку с использованием библиотеки graphics.h .
Выглядит она так :

Рекурсивная снежинка

Формулу для изменения размеров лучиков снежинки более низкого уровня можно придумать любую, вообще чем интересны подобные программы — здесь можно много экспериментировать, пока не добьетесь нужного вам результата. А вот код на С++, рисующий снежинку:

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>
/*
x,y - координаты центра снежинки
n - кол-во лучиков у простейшей снежинки
level - кол-во уровней вложенности рекурсии
*/
void snowflake(int x, int y, int n, int level)  {
	if (level == 4) return; // если мы дошли до 4 уровня вложености , заканчиваем рекурсию
	int i, nx, ny;
	float dAngel = 2.0 * M_PI/n ; // шаг угла
 
	for(i=0;i<n;i++) {
 
	  setcolor(random(14) + 1); // выбираем случайный цвет для лучика
 
	  // рисуем лучик
	  moveto(x,y);
	  nx = x + floor((200/(level*level))*sin((float)i*dAngel + level - 1) );
	  ny = y - floor((200/(level*level))*cos((float)i*dAngel + level - 1) );
	  lineto(nx,ny);
 
	  //рисуем еще меньшую снежинку на краю лучика
	  snowflake(nx,ny,n,level+1);
	}
}
 
int main() {
	int gd = DETECT, gm ;
	initgraph(&gd,&gm,""); // инициализируем графику
	snowflake(getmaxx()/2,getmaxy()/2,12,1); // рисуем снежинку по центру экрана
	closegraph(); // заканчиваем работу программы
	return 0;
}

Не забудьте скопировать драйвер EGAVGA.bgi из папки ..\BGI\ в папку с программой, либо укажите к нему полный путь третьим аргументом функции initgraph();

Tags: , ,

RSS 2.0 - Узнай первым, о обновлениях в комментариях к этой записи

Один комментарий

Оставить комментарий