/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
tegning af fraktaler
Fra : tdn


Dato : 07-01-03 16:57

Hej,

Jeg vil gerne lege med nogle programmer som skal tegne forskellige
fraktaler.
Det er fraktaler som Koch kurven og Sierpinsky trekanten eller lign jeg
gerne vil lege med.
Jeg har engang lavet et program der kunne tegne Kochkurver i et canvas.
Jeg er dog kommet i tvivl om det overhovedet er hensigtsmæssigt at bruge et
canvas til dette.
Har I nogle bedre idéer?
Har nogle af jer nogle gode hints, algoritmer eller kodestumper til hjælp
til at tegne forskellige fraktaler?
Tekster om emnet tager jeg osse gerne imod


--
Med venlig hilsen
Thomas
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCM d s+: a--- C++ UL++ P+ L++ E--- W+++ N++ o K w O-- M- V- PS+ PE++ Y+ PGP
t 5- X+ R tv- b+ DI+ D+ G+ e- h-- r+ y++
------END GEEK CODE BLOCK------



 
 
Thor (09-01-2003)
Kommentar
Fra : Thor


Dato : 09-01-03 15:40

Hej Thomas

Jeg har fundet følgende kodestump på nettet, som tegner Mandelbrot
fraktalen.
Kræver en Form1 med en Button1.
Det går noget hurtigere i dag med at tegne end den gang i 80'erne !!!

Mvh Thor

procedure DrawMandelbrot(ACanvas: TCanvas; X, Y, au, bu: Double; X2, Y2:
Integer);
var
c1, c2, z1, z2, tmp: Double;
i, j, Count: Integer;
begin
c2 := bu;
for i := 10 to X2 do
begin
c1 := au;
for j := 0 to Y2 do
begin
z1 := 0;
z2 := 0;
Count := 0;
{count is deep of iteration of the mandelbrot set
if |z| >=2 then z is not a member of a mandelset}
while (((z1 * z1 + z2 * z2 < 4) and (Count <= 100))) do
begin
tmp := z1;
z1 := z1 * z1 - z2 * z2 + c1;
z2 := 2 * tmp * z2 + c2;
Inc(Count);
end;
//the color-palette depends on TColor(n*count mod t)
{$IFDEF LINUX}
ACanvas.Pen.Color := (16 * Count mod 255);
ACanvas.DrawPoint(j, i);
{$ELSE}
ACanvas.Pixels[j, i] := round(16*count mod 255);
{$ENDIF}
c1 := c1 + X;
end;
c2 := c2 + Y;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
R: TRect;
au, ao: Integer;
dX, dY, bo, bu: Double;
begin
// Initialize Mandelbrot
R.Left := 0;
R.Right := 600;
R.Top := 0;
R.Bottom := 615;
ao := 1;
au := -2;
bo := 1.5;
bu := -1.5;
//direct scaling cause of speed
dX := (ao - au) / (R.Right - R.Left);
dY := (bo - bu) / (R.Bottom - R.Top);
DrawMandelbrot(Self.Canvas, dX, dY, au, bu, R.Right, R.Bottom);
end;




tdn (09-01-2003)
Kommentar
Fra : tdn


Dato : 09-01-03 18:08

> Jeg har fundet følgende kodestump på nettet, som tegner Mandelbrot
> fraktalen.
> Kræver en Form1 med en Button1.
> Det går noget hurtigere i dag med at tegne end den gang i 80'erne !!!
>
> Mvh Thor
>
[KLIP]


Tak for responsen!
Lige Mandelbrot har jeg stadig en smule svært ved at forstå, men jeg vil da
gemme stumpen og studere den!
Mange tak for den.
Jeg leder som sagt stadig efter en masse om andre fraktaler.
Jeg efterlyser osse idéer til gode teknikker til at tegne dem. Altså ud over
i et canvas. Men måske det er den "rigtige" måde at gøre det på?


Mvh
Thomas



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste