Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Множество Мандельброта

Поиск:
Код

//////////////////////////////////////////////////////////////////////////////
//
//  Mandelbrot set drawing
//  (c) Johna Smith, 1996
//
//  Method description:
//    1) Assume z(0)=0
//    2) Organize two loops by X and Y axes
//    3) Determine constant C=X+iY
//    4) Using iterative formula z(i)=z(i-1)*z(i-1)+c calculate Z(DEPTH),
//       where DEPTH is max depth of iterations
//    5) If Z(DEPTH) is near Z(0) then point (X,Y) belongs to Mandelbrot set
//
//  ! This program is NOT optimized for best performance !
//  To do so don't use putpixel function - change bytes in video memory directly.
//
//////////////////////////////////////////////////////////////////////////////

#define DEPTH 100 // iterations depth

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

// this function initializes graphics mode
// it will work only if you're using Borland C++ compiler & BGI drivers
// if you're using another compiler you should overwrite body of this function

void init_gr(void)
{
   /* request autodetection */
   int gdriver = DETECT, gmode, errorcode;

   /* initialize graphics mode */
   initgraph(&gdriver, &gmode, "");

   /* read result of initialization */
   errorcode = graphresult();

   if (errorcode != grOk)    /* an error occurred */
   {
      printf("Graphics error: %sn", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);               /* return with error code */
   }
}

// this function shuts graphics mode down
// it will work only if you're using Borland C++ compiler & BGI drivers
// if you're using another compiler you should overwrite body of this function

void end_gr(void)
{
  closegraph();
}

// this function puts pixel on the screen in (x,y) position using color 'color'
// it will work only if you're using Borland C++ compiler & BGI drivers
// if you're using another compiler you should overwrite body of this function

void PutPixel(int x, int y, int color)
{
  putpixel(x,y,color);
}

void Mandelbrot(void)
{
  float zi, zr, ci, cr, tmp;

  // assuming graphics mode 640x480 16 colors
  for(int i=-320;i<320;i++)  // for all pixels on the X axe
  {
     ci=((float)i)/320.0; // setting Im c = i/320
     for(int j=-380;j<160;j++)  // for all pixels on the Y axe
     {
        cr=((float)j)/240.0; // setting Re c = j/240
        zi=zr=0.0; // fixing z=0 we'll change c - it's Mandelbrot set
        for(int k=0;k<DEPTH;k++)
        {
   // z=z*z+c
   //(zr+i*zi)*(zr+i*zi)=(zr*zr-zi*zi)+i*(2*zr*zi)
   // zi=zr*zr-zi*zi+cr
   //
   tmp=zr*zr-zi*zi;
   zi=2*zr*zi+ci;
   zr=tmp+cr;
   if (zr*zr+zi*zi>1.0E16) break; // break if |z| is very big
    }
    if (k<DEPTH)
   PutPixel(i+320,j+380,k%3+1); // z was very big => it is external point
    else PutPixel(i+320,j+380,11); // internal point
     }
     if(kbhit()) break;
  }
}

int main(void)
{
  // initializing graphics mode
  init_gr();

  /* example */
  Mandelbrot();

  /* clean up */
  getch();
  end_gr();

  return 0;
}
Сайт: forum.vingrad.ru






Просмотров: 2649

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную