Пятиугольник

5

Построить фрактал Пятиугольник.

Вызываем функцию ProvRis и передаем ей параметры:
- (320,260) - центр первого пятиугольника
- 95 - радиус окружности, описанной вокруг пятиугольника
- pi/2 - угол поворота
- 3 - уровни
Находим расстояние от центра пятиугольника до всех центров внешних пятиугольников по формуле
h = 2*r*cos(pi/5).Рисуем внешние пятиугольники и запускаем рекурсивно функцию от одного из внешних пятиугольников с пересчитанными углом, центром и радиусом.Рекурсия производиться от центра пятиугольника с новым радиусом.
Заканчивается функция еще одним рекурсивным вызовом для рисования центральных пятиугольников.
Непосредственно пятиугольники рисует функция Draw

void main()
{
#include <graphics.h>
#include <conio.h>
#include <math.h>
#define pi M_PI
 
void Draw (double x, double y, double r, double a) 
{
	int i;
	double xx[6], yy[6];
 
	for (i=0; i<6; i++)
	{
		xx[i] = r*cos(a+i*pi*2/5);
		yy[i] = r*sin(a+i*pi*2/5);
	}
	for (i=0; i<5; i++)
		line (x+xx[i], y+yy[i], x+xx[i+1], y+yy[i+1]);
}
 
void ProvRis (double x, double y, double r, double a, int d)
{
	int i;
	double h;
 
	h = 2*r*cos(pi/5);
 
	for (i=0; i<5; i++)
	{
		Draw (x - h*cos(a+i*pi*2/5), y - h*sin(a+i*pi*2/5), r, a+pi);
		if ( d > 0 )
			ProvRis (x - h*cos(a+i*pi*2/5), y - h*sin(a+i*pi*2/5), r/(2*cos(pi/5)+1), a, d-1);
	}
        if ( d > 0 )
		ProvRis (x, y, r/(2*cos(pi/5)+1), a+pi, d-1);
}
 
int main ()
{
	int gm, gd=DETECT;
 
	initgraph (&gd, &gm, "C:\\bc\\bgi");
 
	ProvRis (320, 260, 95, pi/2, 3);
	getch ();
	closegraph ();
}
}

Ключевые слова: 
exe-файл не запускается
ВложениеРазмер
5.ZIP134.47 кб