1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94:
| unit Kochkurve;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;
type TForm1 = class(TForm) PB1: TPaintBox; BitBtn1: TBitBtn; Edit1: TEdit; procedure BitBtn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Kochkurve (xAnfang, yAnfang, xEnde, yEnde, Stufe: integer); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject); var Tiefe : word; begin Pb1.Refresh; if (Edit1.Text= '') then Edit1.Text := '1'; if (strtoint (Edit1.text)>0) then begin Tiefe := strtoint (Edit1.text);
Kochkurve (400,250,100,250, Tiefe); Kochkurve (400,250,400,150, Tiefe); Kochkurve (400,150,100,150, Tiefe); Kochkurve (100,150,100,250, Tiefe);
end; end;
procedure TForm1.FormCreate(Sender: TObject); var tiefe: word;
begin Pb1.Refresh; if (Edit1.Text= '') then Edit1.Text := '1'; if (strtoint (Edit1.text)>0) then begin Tiefe := strtoint (Edit1.text); Kochkurve (60,100,260,100, Tiefe); end; end;
procedure TForm1.Kochkurve (xAnfang, yAnfang, xEnde, yEnde, Stufe: integer); var x1,y1,x2,y2,x3,y3,x4,y4 : integer; begin with Pb1.Canvas do begin Moveto (xAnfang,yAnfang); if Stufe > 1 then begin
x1 := (2* xAnfang) div 3+ xEnde div 3; y1 := (2* yAnfang) div 3+ yEnde div 3;
x2 := (xAnfang + xEnde) div 2 + round (Sqrt(3)/6*(yEnde-yAnfang)); y2 := (yAnfang + yEnde) div 2 + round (Sqrt(3)/6*(xAnfang-xEnde));
x3 := xAnfang div 3 + (2 * xEnde) div 3; y3 := yAnfang div 3 + (2 * yEnde) div 3;
x4 := (2* x3) div 3 + x3 div 3; y4 := (2* y3) div 3 + y3 div 3;
Kochkurve (xAnfang,yAnfang,x1,y1, Stufe -1); Kochkurve (x1,y1,x2,y2, Stufe -1); Kochkurve (x2,y2,x3,y3, Stufe -1); Kochkurve (x3,y3,x4,y4, Stufe -1); Kochkurve (x4,y4,xEnde,yEnde, Stufe -1);
end else LineTo (xEnde,yEnde) end; end; end. |