Home > Programming > Fractals > Triangle |
const
escape=4.0;
{ escape value }
attract=0.0001;
{
attractor sensitivity }
const
Black = 0;
Blue = 1;
Green = 2;
Cyan = 3;
Red = 4;
Magenta = 5;
Brown = 6;
LightGray = 7;
DarkGray = 8;
LightBlue = 9;
LightGreen =10;
LightCyan =11;
LightRed =12;
LightMagenta =13;
Yellow =14;
White =15;
function GetRGBColor(color:byte):longint;
begin
case Color of
black : GetRGBColor := RGB(0,0,0);
blue : GetRGBColor := RGB(0,0,128);
green : GetRGBColor := RGB(0,128,0);
cyan : GetRGBColor := RGB(0,255,255);
red : GetRGBColor := RGB(128,0,0);
magenta : GetRGBColor := RGB(128,0,128);
brown : GetRGBColor := RGB(128,128,0);
lightgray : GetRGBColor := RGB(192,192,192);
darkgray : GetRGBColor := RGB(128,128,128);
lightBlue : GetRGBColor := RGB(0,0,255);
lightGreen : GetRGBColor := RGB(0,255,0);
lightcyan : GetRGBColor := RGB(0,255,255);
lightRed : GetRGBColor := RGB(255,0,0);
lightmagenta : GetRGBColor := RGB(255,0,255);
yellow: GetRGBColor := RGB(255,255,0);
white : GetRGBColor := RGB(255,255,255);
else
GetRGBColor := RGB(0,0,255);
end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure FTriangle(ABitmap: TBitmap);
{ compute and display Sierpinski triangle via random orbits}
var
x, y : integer;
{ pixel coordinates }
triangle : integer; { select random traiangle}
i : integer;
{ loop counters}
MaxX,
MaxY : integer; { maximum X and Y coordinates}
Rect : TRect;
Iterations: integer;
begin
SetRect(Rect, 0, 0,
ABitmap.Width, ABitmap.Height);
with Rect do
begin
MaxX := right - left;
MaxY := bottom - top; {
find maximum Y coordinate }
if (MaxX=0) or (MaxY=0) then exit;
MaxX := Min(MaxX,MaxY);
MaxY := MaxX;
right := left + MaxX;
bottom := top + MaxY;
x := random(MaxY); {select random
starting point}
y := random(MaxY); {use
MaxX=MaxY }
Iterations := MaxY * 100;
for i := 1 to iterations do
begin
triangle := random(3)+1; { select random number between 1
and 3}
case triangle
of { select which triangle to measure from }
1:
begin
x
:= x div 2;
{
find 1/2 way point to A}
y
:= (MaxY + y) div 2
end;
2: begin
x
:= (MaxY div 2 + x) div 2; {
find 1/2 way point to B }
y
:= y div 2
end;
3: begin
x
:= (MaxY + x) div 2;
{ find 1/2 way point to C}
y
:= (MaxY + y) div 2
end
end;
ABitmap.Canvas.Pixels[x+Left,y+Top] :=
ABitmap.Canvas.Pen.Color;
end;
end;
end;
////////////////////////////////////////////////////////////////////////////////
� 2004 Jim Valavanis