this slowpoke moves

Draw a Snowflake

var
  Form1: TForm1;
  canv: Tcanvas;
  
//

procedure mt(x,y: integer); //moveTo
begin
  form1.Image1.Canvas.moveTo(x,y);
end;

procedure pv(r,th: real); //polarvektor
  var rad: real;
begin
  rad := th*pi/180;
  with form1.Image1.Canvas do
    lineTo(round(penpos.x + r*cos(rad)),
           round(penpos.y + r*sin(rad)));
end;

procedure fraktaleLinie(ordnung: integer; l, th:real);
begin
  if ordnung = 0 then pv(l,th) else Begin
    fraktaleLinie(ordnung - 1, l/3,th);
    fraktaleLinie(ordnung - 1, l/3,th - 60);
    fraktaleLinie(ordnung - 1, l/3,th + 60);
    fraktaleLinie(ordnung - 1, l/3,th);
    application.ProcessMessages;
  End;
end;

function hoch(x: real; n: integer): real;
begin
  if n <= 0 then result := 1 else result := x*hoch(x, n - 1);
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
  var L, ordnung, xm, ym: integer;
      ganz, laenge, zaehler, nenner: extended;
begin
  L := 400;
  ordnung := spinedit1.Value;
  if (ordnung > 5) or (Ordnung < 0) then Begin
    showmessage('Ordung kann den Wert 0, 1, 2, 3, 4 oder 5 annehmen.'#13+
    'Bei Werten > 5 wird nur die Länge Berechnet.');
  End;
  with image1.Canvas do Begin
    brush.Color := RGB(255,255,255);
    rectangle(0,0,width,height);
      font.Size := 14;
      font.Color := clred;
      if ordnung > 600 then Begin
        TextOut(10,10,'Länge = ' + 'fast unendlich');
        exit;
       End;
      laenge := hoch(4/3,ordnung)*3;
      ganz := int(laenge + 1E-15);
      nenner := hoch(3,ordnung - 1);
      zaehler := int(nenner*(laenge - ganz) + 0.5);
      TextOut(10,10,'Länge = ' +
        formatfloat('##.### ###',hoch(4/3,ordnung)*3) + ' LE');
      if ordnung < 25 then TextOut(10,30,' = ' +
        floatToStr(ganz) + ' ' + floatToStr(zaehler) + '/' +
        floatToStr(Nenner) + ' LE');
    if (ordnung < 0) or (ordnung >5) then exit;
    xm := width div 2 - 60;
    ym := height div 2;
    mt(round(xm - L/2), round(ym - sqrt(3)*l/4));
    fraktaleLinie(ordnung,L,0);
    fraktaleLinie(ordnung,L,120);
    fraktaleLinie(ordnung,L,240);
  end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate