Автор работы: Пользователь скрыл имя, 28 Декабря 2011 в 20:03, курсовая работа
Поняття фрактал та фрактальна геометрія, що з'явилися в кінці 70-х, з середини 80-х міцно увійшли в обіг математиків і програмістів. Слово фрактал утворена від латинського fractus і в перекладі означає що складається із фрагментів. Воно було запропоновано Бенуа Мандельбротом в 1975 році для позначення нерегулярних, але самоподібних структур, якими він займався. Народження фрактальної геометрії прийнято пов'язувати з виходом в 1977 році книги Мандельброта `The Fractal Geometry of Nature '. У його роботах використані наукові результати інших вчених, які працювали в період 1875-1925 років в тій же області (Пуанкаре, Фату, Жюліа, Кантор, Гаусдорф). Але лише в наш час вдалося об'єднати їх роботи в єдину систему.
case 9:{GD(); F9->HNIFS(); getch(); closegraph(); reset->menu();};
case 10: exit(1);
}
};
}
}
while(key!=27);
}
Start::Start()
{
#define min 1 //TTree
#define min2 2 //BTree
#define min3 3 //VTree
#define max 3 //PITree
#define max2 5 //DTree
//color=9; //menu()
}
Start::~Start()
{
}
void Start::GD()
{
/* request auto detection */
int gdriver=DETECT/*
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "E:\\BC\\BGI");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("
printf("
getch();
exit(1); /* terminate with an error code */
}
}
int TTree::Draw(int x, int y, int l)
{
while (l>min)
{
l=l/2;
line(x,y,x,y-l);
line(x,y-l,x-l,y-
line(x,y-l,x+l,y-
Draw(x-l,y-l,l);
Draw(x+l,y-l,l);
if(!kbhit()) l=1;
}
return 0;
}
int HTree::Draw(int x, int y, int l)
{
while (l>4)
{
l=l/2;
line(x,y,x+l,y);
line(x,y,x-l,y);
line(x+l,y,x+l,y-
line(x+l,y,x+l,y+
line(x-l,y,x-l,y-
line(x-l,y,x-l,y+
Draw(x+l,y-l/2,l);
Draw(x+l,y+l/2,l);
Draw(x-l,y-l/2,l);
Draw(x-l,y+l/2,l);
if(!kbhit()) l=1;
}
return 0;
}
int BTree::Draw(int x, int y, int l)
{
while (l>min2)
{
l=l/2;
setfillstyle(9,4);
bar(x,y,x+l,y-l*2)
setfillstyle(9,14)
bar(x,y,x-l,y-l*2)
Draw(x-l/2,y-l,l);
Draw(x+l/2,y-l,l);
if(!kbhit()) l=1;
}
return 0;
}
int VTree::LineTo1(int x, int y, float l, float u)
{
line(x, y, ceill(x+l*cos(u)), ceill(y-l*sin(u)));
return 0;
}
int VTree::Draw(int x, int y, float l)
{
while (l>min3)
{
l=l*0.5;
LineTo1(x, y, l, 3.14/4);
LineTo1(x, y, l, 3*3.14/4);
Draw(ceill(x-l*
Draw(ceill(x+l*
if(!kbhit()) l=1;
}
return 0;
}
int PITree::LineTo1(int x, int y, float l, float u)
{
line(x, y, ceill(x+l*cos(u)), ceill(y-l*sin(u)));
return 0;
}
int PITree::Draw(int x, int y, float l, float u)
{
while (l>max)
{
l=l*0.7;
LineTo1(x, y, l, u);
x=ceill(x+l*cos(u)
y=ceill(y-l*sin(u)
Draw(x, y, l, u+3.14/4);
Draw(x, y, l, u-3.14/6);
if(!kbhit()) l=1;
}
return 0;
}
int DTree::LineTo1(float x, float y, float l, float u)
{
line(ceill(x), ceill(y), ceill(x+l*cos(u)), ceill(y-l*sin(u)));
return 0;
}
int DTree::Draw(int x, int y, float l, float u)
{
while (l>max2)
{
l=l*0.37;
LineTo1(x, y, l, u);
x=ceill(x+l*cos(u)
y=ceill(y-l*sin(u)
Draw(x, y, l+1/3, u+4*3.14/3);
Draw(x, y, l+1/3, u-4*3.14/3);
Draw(x, y, l+1/3, u);
if(!kbhit()) l=1;
}
return 0;
}
float JuliaFractal::ComplexAbs(
{
return X.Re*X.Re+X.Im*X.Im;
}
void JuliaFractal::JulFrac()
{
const float MinX = -5.5, MinY = -5.5, MaxX = 10.5, MaxY = 10.5;
int i, x, y;
float dx, dy;
Complex Z, C;
unsigned int XSize, YSize;
XSize = 1024;
YSize = 768;
dx = (MaxX-MinX)/XSize;
dy = (MaxY-MinY)/YSize;
C.Re = 0.32; C.Im = 0.043;
for (y=0; y<YSize; y++)
for (x=0; x<XSize; x++)
{
Z.Re = MinX+x*dx; Z.Im = MinY+y*dy;
for(i=0; (i<256)&(ComplexAbs(Z)<4); i++)
Z = ComplexAdd(ComplexMult(Z, Z), C); //Z(n+1) = Z(n)^2 + C
putpixel(x, y,i*3/2);
};
}
void SPYMBL::Sqr(Complex *z)
{
Complex Fool = *z;
z->x = Fool.x * Fool.x - Fool.y * Fool.y;
z->y = 2 * Fool.x * Fool.y;
}
char SPYMBL::GetColor(Complex Point)
{
Complex z = Point, Fool;
int Color = 86;
while (z.x * z.x + z.y * z.y <= 4 && Color)
{
Sqr(&z);
z.x += Point.x;
z.y += Point.y;
Color--;
}
return 16+Color;
}
void SPYMBL::MBS(long double xMin, long double xMax, long double yMin, long double yMax)
{
Complex Point;
long double IncX, IncY;
IncX = (xMax - xMin) / WDT;
IncY = (yMax - yMin) / HGT;
int x, y;
for (x = 0, Point.x = xMin; x < WDT; x++, Point.x += IncX)
for (y = 0, Point.y = yMin; y < HGT; y++, Point.y += IncY)
putpixel(x, y , GetColor(Point));
}
void THORM::THM()
{
iter=15;
max1=400;
for (i=0 ; i< 15 ; i++) setpalette(i,i);
for (i=0 ; i< 15 ; i++) setrgbpalette(i,i*4,i*4,i*4);
mx = getmaxx() / 2;
my = getmaxy() / 2;
for (y = -my; y < my; y++)
for (x= -mx; x< mx; x++) {
n = 0;
z.x = x * 0.01;
z.y = y * 0.01;
c.x = 1;
c.y = 1;
while (((z.x*z.x) + (z.y*z.y) < max1) && (n < iter)) {
t = z; //
z.x = t.x/cos(t.y) + c.x;
z.y = t.y/cos(t.x) + c.y;
}
putpixel(mx + x, my + y, n);
if (kbhit()) break;
}
getch();
}
void HENONIFS::HNIFS()
{
x=0; y=0;
for (i=0; i<m; i++)
{
a[i] = cos (2*M_PI * i/m);
b[i] = sin (2*M_PI * i/m);
}
while (!kbhit ())
{
l = random (m);
if (random (m) < 2)
{
x1 = x/2 + a[l];
y1 = y/2 + b[l];
}
else
{
x1 = (x*a[l] + y*b[l] + x*x*b[l])/ 6;
y1 = (y*a[l] - x*b[l] + x*x*a[l])/ 6;
}
x=x1; y=y1;
putpixel (320 + ceil (x*140), 240 + ceil (y*140), 6);
}
getch ();
}
void main()
{
clrscr();
Start *G;
G->menu();
getch();
}
|
Мал. 10 –блок
фрактальне дерево
|
Мал. 2 - HENONIFS
Мал. 3 - Дерево Пифагора
Мал. 4 – фрактал Мандельброта