Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Создание фрактальных рисунков

Автор: Jaxx 1.11.2004 3:02

Я недавно увидел несколько примеров фрактальных рисунков. Стало мне интересно, как они создаются. Оказывается, что рисунок состоит из одинаковых точек, координаты которых вычислаются по какой-то математич. формуле. Можно ли нарисовать такую картинку в Паскале?

Автор: volvo 1.11.2004 3:05

В Дельфях писал ... Если надо - могу скинуть исходник ...

Автор: Romtek 1.11.2004 5:02

Вот исходник множества Мандельброта на FPC:

Код
program Mandel;

{ This program generates the Mandelbrot set fractal curves.  It is taken from
 Roger T. Stevens book: FRACTAL Programming in Turbo Pascal.
 This is the best book to buy if you are interested in or studying fractal
 curves and chaos.
}

{$ifdef Win32}
{$apptype GUI}
{$endif}

uses
{$ifdef Win32}
 WinCrt,
 Windows,
{$endif}
 Graph;

const
    maxcol = 800;
    maxrow = 600;
    max_colors = 256;
    max_iterations = 512;
    max_size = 4;
    MaxDepth = 2; // set more for speed detalization (3,4,..)
    XMax: single = 1.2;
    XMin: single = -2.2;
    YMax: single = 1.3;
    YMin: single =-1.3;


Function ComputeColor(a,b: single): word;
var X,Y,Z,Xsquare,Ysquare : single;
    color: integer;
begin
    X := 0.0;
    Y := 0.0;
    Xsquare := 0;
    Ysquare := 0;
    color := 90;
    repeat
          Xsquare := SQR(X);
          Ysquare := SQR(Y);
          Y := 2.0*X*Y + B;
          X := Xsquare - Ysquare + A;
          dec(color);
    until (color=0) OR (Xsquare + Ysquare >= max_size);
    ComputeColor:=(color MOD max_colors)
end;

var
  YC,P,Q,Q2,deltaP,deltaQ,dQ : single;
  i,row,row2,col,depth,level : integer;
  GraphDriver,GraphMode: SMALLINT;

begin
    deltaP := (XMax - XMin)/(maxcol);
    deltaQ := (YMax - Ymin)/(maxrow);

    {$ifdef Win32}
    ShowWindow(GetActiveWindow,0);
    {$endif}

    GraphDriver := d8bit;
    GraphMode := m800x600; //m640x480
    InitGraph(GraphDriver,GraphMode,'');
    if Graphresult<>0 then exit;

    for depth:=MaxDepth downto 0 do
    begin

    YC := (YMin+YMax) / 2.0;
    Q := YC;

    level:=(1 shl depth);
    dQ := deltaQ * level;

    row := maxrow div 2;
    while row>=0 do
    begin
         if Keypressed then break;

         P := XMin;

         row2:=maxrow-row;
         Q2:=YC+Q;
         for col := 0 to maxcol-1 do
         begin
              PutPixel(col,row, ComputeColor(P,Q));
              PutPixel(col,row2, ComputeColor(P,Q2));
              P += deltaP;
         end;

         Q -= dQ;
         row-=level;
    end;
    end;

    {$ifndef Win32}
    readln;
    {$else: Win32}
    repeat
    until keypressed;
    {$endif}

    CloseGraph;
end.

Автор: Altair 1.11.2004 10:48

Да, фракталы можно рисовать на Паскале естественно. Язык тут не при чем.
Видел где-то очень хороший пример на паскале... (кажется на сурсах, а можети у нас...)

[offtop]
какие люди пожаловали smile.gif rolleyes.gif
[/offtop]