Построить фрактальный пятиугольник Дарера
ПЯТИУГОЛЬНИК ДАРЕРА выглядит как связка пятиугольников, сжатых вместе. Фактически он образован при использовании пятиугольника в качестве инициатора и равнобедренных треугольников, отношение большей стороны к меньшей, в которых в точности равно так называемой золотой пропорции (1.618033989 или 1/(2cos72)) в качестве генератора. Эти треугольники вырезаются из середины каждого пятиугольника, в результате чего получается фигура, похожая на 5 маленьких пятиугольников, приклеенных к одному большому.
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
#include <stdlib.h>
#define SIZE 6
#define LP 0.4
#define M M_PI
void DRAWING(double x,double y,double r,double a);
void DARER(double x, double y, double r, double a, int d);
int main(){
int graphdriver = DETECT, gmode, errorcode;
initgraph(&graphdriver,&gmode,"c:\\borlandc\\bgi");
DARER(320, 260, 95, M_PI/10, 3);
getch();
return 0;
}
void DRAWING(double x,double y,double r,double a) {
double m1[SIZE];
double m2[SIZE];
for(int i = 0; i < SIZE; i++){
m1[i] = r*cos(a+i*M_PI*LP);
m2[i] = r*sin(a+i*M_PI*LP);
}
for(i = 0; i < SIZE-1; i++){
setcolor(11);
line(x+m1[i],y+m2[i],x+m1[i+1],y+m2[i+1]);
}
}
void DARER(double x, double y, double r, double a, int d) {
double v;
v = 2*r*cos(M/5);
for(int i = 0; i < SIZE; i++){
DRAWING(x-v*cos(a+i*M*LP),y-v*sin(a+i*M*LP),r,a+M+i*M*LP);
if (d > 0)
DARER(x-v*cos(a+i*M*LP),y-
v*sin(a+i*M*LP),r/(2*cos(M/5)+1),a+M+(2*i+1)*M*2/10, d-1);
}
}