Автор: 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]
какие люди пожаловали
[/offtop]