Фракталы

Автор работы: Пользователь скрыл имя, 28 Декабря 2011 в 20:03, курсовая работа

Описание работы

Поняття фрактал та фрактальна геометрія, що з'явилися в кінці 70-х, з середини 80-х міцно увійшли в обіг математиків і програмістів. Слово фрактал утворена від латинського fractus і в перекладі означає що складається із фрагментів. Воно було запропоновано Бенуа Мандельбротом в 1975 році для позначення нерегулярних, але самоподібних структур, якими він займався. Народження фрактальної геометрії прийнято пов'язувати з виходом в 1977 році книги Мандельброта `The Fractal Geometry of Nature '. У його роботах використані наукові результати інших вчених, які працювали в період 1875-1925 років в тій же області (Пуанкаре, Фату, Жюліа, Кантор, Гаусдорф). Але лише в наш час вдалося об'єднати їх роботи в єдину систему.

Файлы: 1 файл

kursova.DOC

— 411.50 Кб (Скачать файл)

                  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/*installuserdriver("SVGA", NULL)*/, gmode, errorcode;

 

       /* initialize graphics and local variables */

       initgraph(&gdriver, &gmode, "E:\\BC\\BGI");

 

       /* read result of initialization */

       errorcode = graphresult();

       if (errorcode != grOk)  /* an error occurred */

       {

                  printf("Graphics error: %s\n", grapherrormsg(errorcode));

                  printf("Press any key to halt:");

                  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-l);

            line(x,y-l,x+l,y-l);

            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-l/2);

            line(x+l,y,x+l,y+l/2);

            line(x-l,y,x-l,y-l/2);

            line(x-l,y,x-l,y+l/2);

            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*cos(3.14/4)), ceill(y-l*sin(3.14/4)), l);

            Draw(ceill(x+l*cos(3.14/4)), ceill(y-l*sin(3.14/4)), 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(Complex X)

{

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;

                                    n++;

                         }

                         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();

}

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  1. Приклади виконання роботи
 
 
    Мал. 1 - Меню

 
 
 
 
 
 
 
 
Мал. 10 –блок  фрактальне дерево

 
 
 
 
 
 

    Мал. 2 - HENONIFS

 
 
 
 
 
 
 
 
 
 
 
 
 

    Мал. 3 -  Дерево Пифагора

 
 
 
 
 
 
 
 
 
 
 
 

    Мал. 4 – фрактал Мандельброта

 
 
 
 
 
 
 

Информация о работе Фракталы