From 9bdbb88d2d4a79da872d62b2091fbf7e824d6d60 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Mon, 10 Jul 2023 21:48:00 +0200 Subject: nun gebogen --- spectre.lps | 99 +++++++++++++++++++++++++++++++++------------------------ spectreunit.pas | 47 ++++++++++++++++++++------- unit1.pas | 2 +- 3 files changed, 94 insertions(+), 54 deletions(-) diff --git a/spectre.lps b/spectre.lps index 975dbf5..9168810 100644 --- a/spectre.lps +++ b/spectre.lps @@ -20,9 +20,8 @@ - - - + + @@ -30,9 +29,10 @@ + - - + + @@ -47,14 +47,15 @@ - - - + + + + - + @@ -77,45 +78,23 @@ - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -200,6 +179,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spectreunit.pas b/spectreunit.pas index f84fb98..7b258e3 100644 --- a/spectreunit.pas +++ b/spectreunit.pas @@ -12,6 +12,9 @@ type private _o: tExtPoint; _alpha,_size: extended; + _ecken: array of tExtPoint; + _winkel: array of extended; + procedure berechneEckenUndWinkel; public constructor create(x,y,alpha,size: extended); procedure draw(c: tCanvas); @@ -19,8 +22,10 @@ type implementation +// https://www.chiark.greenend.org.uk/~sgtatham/quasiblog/aperiodic-spectre/ + uses - matheunit; + matheunit, graphType; constructor tSpectre.create(x,y,alpha,size: extended); begin @@ -28,23 +33,43 @@ begin _o:=extPoint(x,y); _alpha:=alpha; _size:=size; + berechneEckenUndWinkel; end; -procedure tSpectre.draw(c: tCanvas); +procedure tSpectre.berechneEckenUndWinkel; var - r: tExtPoint; - a: extended; i: longint; const winkel: array of extended = (90,-60,90,-60,90,60,-90,60,90,60,-90,60,0,60); begin - r:=_o; - a:=_alpha; - c.moveTo(point(round(r))); - for i:=0 to length(winkel)-1 do begin - r:=r + _size * einheitsVektor(a); - c.lineTo(point(round(r))); - a:=a - winkel[i]/180*pi; + setLength(_winkel,length(winkel)); + setLength(_ecken,length(winkel)+1); + _winkel[0]:=_alpha; + _ecken[0]:=_o; + for i:=0 to length(winkel)-2 do begin + _ecken[i+1]:=_ecken[i] + _size * einheitsVektor(_winkel[i]); + _winkel[i+1]:=_winkel[i] - winkel[i]/180*pi; + end; + _ecken[length(_ecken)-1]:=_ecken[0]; +end; + +procedure tSpectre.draw(c: tCanvas); +var + i: longint; + p: tInt64Point; + s: string; + a,b,m: tExtPoint; +begin + s:='lorem ipsum'; + p:=round(0.5*(_ecken[0]+_ecken[6]-extPoint(c.textWidth(s),c.textHeight(s)))); + c.TextOut(p['x'],p['y'],s); + for i:=0 to length(_ecken)-2 do begin + a:=_ecken[i+byte(odd(i))]; + b:=_ecken[i+1-byte(odd(i))]; + m:=a + rotationsMatrix(pi/3)*(b-a); + c.Arc( + round(m['x']-_size),round(m['y']-_size)+1,round(m['x']+_size),round(m['y']+_size)+1, + round(b['x']),round(b['y']),round(a['x']),round(a['y'])); end; end; diff --git a/unit1.pas b/unit1.pas index ed06ce3..f6b029c 100644 --- a/unit1.pas +++ b/unit1.pas @@ -59,7 +59,7 @@ end; procedure TForm1.FormCreate(Sender: TObject); begin setLength(spectres,1); - spectres[0]:=tSpectre.create(100,100,pi/4,30); + spectres[0]:=tSpectre.create(100,150,pi/4,30); end; end. -- cgit v1.2.3-54-g00ecf