Ir para o conteúdo

Triângulo de Sierpinski

Mais uma brincadeira com a unit Graph... Já alguém ouviu falar do Triângulo de Sierpinski? Muito famoso entre os entusiastas da Geometria Fractal.

Querem saber como é este triângulo? Este programa calcula os pontos do triângulo segundo um método de aleatoriedade e que só falha ~1% dos pontos - isto explicará um ou outro pixel fora do triângulo.

Enjoy! ;-)

Código-fonte

PROGRAM Sierpinski;

USES sysutils, graph;

VAR Driver, Modus : smallint;
    x, y, n : real;
    k : integer;

BEGIN
     try
        writeln('A desenhar o Triangulo de Sierpinski...');

        try
           DetectGraph(Driver, Modus);
           InitGraph(Driver, Modus, '');

           randomize;
           x := random;
           y := random;

           for k:=1 to 30000 do begin
               n := random;

               if (n<=1/3) then begin
                  x := x/2;
                  y := y/2;
               end
               else if (n>1/3) and (n<=2/3) then begin
                  x := (x+0.5)/2;
                  y := (1+y)/2;
               end
               else if (n>2/3) then begin
                  x := (x+1)/2;
                  y := y/2;
               end;

               PutPixel(round(500*x), round(500-500*y), White);
           end

        except
              ON ex:exception do begin
                 writeln('ERRO: ',ex.message);
                 CloseGraph;
              end;
        end

     finally
            write('ENTER para terminar...');
            readln; // pausa
            CloseGraph;
     end;
END.

Preview do resultado

Triângulo de Sierpinski - preview do resultado