Autor |
Beitrag |
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 21.01.11 13:27
Wir haben ein Problem!
Unser Lehrer in der Schule hat uns dies nicht richtig erklärt.
Könnt ihr uns bei der Programmierung dieses AB helfen?
projekte.gymnasium-o...Grafiken%20-%202.pdf
Würden uns über Antworten freuen.
|
|
Nersgatt
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 21.01.11 13:39
Dann zeig doch mal Deine Ansätze und wo es genau hakt. Wir helfen gern bei der Aufgabe - aber wir machen sie nicht für Dich.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 21.01.11 13:42
Hi und
Informatiklady hat folgendes geschrieben : | Könnt ihr uns bei der Programmierung dieses AB helfen? |
Können ja.
An sich musst du dir erstmal überlegen:
Wie zeichne ich ein einfaches Rechteck. Welche Parameter hat die dafür nötige Funktion.
Der Trick an Rekursion ist, dass du beim Rechteck zeichnen die Procedure fürs Rechteck zeichnen wieder aufrufst...die ruft dann wieder Rechteck zeichnen auf usw. Du hast dann eine endlose Folge. Stürzt dein Programm mit der Meldung "Stack overflow" ab, dann hast du es schon fast geschafft Dann musst du nur noch eine Abbruchbedingung definieren.
Edit: Was ich nicht verstehe ist das "Fehler! Keine gültige Verknüpfung.". Besonders in der ersten Zeile ergibt das garkeinen Sinn für mich.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 21.01.11 13:56
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 21.01.11 14:08
Für die ersten 3 Figuren haben wir schon allein eine Lösung gefunden jetzt fehlt uns für die nächsten Figuren der Ansatz.
Das sind die Prozeduren für Figur 1-3:
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:
| procedure Tform1.quadrat(x1,y1,l,ordnung1:integer); begin if ordnung1 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l) else begin quadrat(x1,y1,l div 2, ordnung1-1); quadrat(x1+l div 2,y1,l div 2, ordnung1-1); quadrat(x1,y1+l div 2 ,l div 2,ordnung1-1); quadrat(x1+l div 2, y1+l div 2, l div 2, ordnung1-1);
end;
end; procedure TForm1.quadrat2(x1,y1,l,ordnung:integer); begin if ordnung = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l) else if ordnung=1 then begin quadrat2(x1,y1,l div 2, ordnung-1); quadrat2(x1+l div 2,y1,l div 2, ordnung-1); quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1); quadrat2(x1+l div 2, y1+l div 2, l div 2, ordnung-1); end else begin quadrat2(x1,y1,l div 2,0) ; quadrat2(x1+l div 2,y1,l div 2, ordnung-1); quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1); quadrat2(x1+l div 2, y1+l div 2, l div 2, 0); end; end;
procedure TForm1.quadrat3(x1,y1,l,ordnung2:integer); begin if ordnung2 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l) else if odd(ordnung2) then begin quadrat3(x1,y1,l div 2, ordnung2-1) ; quadrat3(x1+l div 2,y1,l div 2, 0); quadrat3(x1,y1+l div 2 ,l div 2,0); quadrat3(x1+l div 2, y1+l div 2, l div 2,ordnung2-1);
end else begin quadrat3(x1,y1,l div 2, 0); quadrat3(x1+l div 2,y1,l div 2, ordnung2-1); quadrat3(x1,y1+l div 2 ,l div 2,ordnung2-1); quadrat3(x1+l div 2, y1+l div 2, l div 2, 0); end; |
Moderiert von Martok: Delphi-Tags gesetzt
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 21.01.11 14:18
Das sieht doch schomal gut aus (mal von der seltsamen Einrückung abgesehen).
Figur 6,7 funktionieren ähnlich. Die 6 ist im Endeffekt die 1, nur dass man um das Rechteck etwas Platz lässt. Der freigelassene Platz ist prozentual zu sehen...
Hmm, die 7 ist knifflig Da seh ich auf Anhieb nicht wie das System genau ist.
Bei der 4 musst du irgendwie die Rotation mit übergeben. Deine Funktion würde also noch einen zusätzlichen Parameter kriegen (rotiert=ja/nein), den schaltest du bei jedem Zeichnen um (not rotiert).
Ich glaub das gedrehte Rechteck müsst ihr mit 4 Linien zeichnen, weiß nicht ob das Canvas rotierte Rechtecke kann.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 21.01.11 14:24
Geht das jetzt auch nochmal mit einfachem Deutsch weil wir haben das jetzt komplett nicht verstanden =(
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 21.01.11 14:32
Hehe, klar Mal als Quellcode
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure Tform1.quadrat4(x1,y1,l,ordnung1:integer; rotiert: boolean); begin if ordnung1 = 0 then else begin if rotiert then begin begin quadrat4(neuX,neuY,neuL,ordnung-1, not rotiert); end else begin quadrat4(neuX,neuY,neuL,ordnung-1, not rotiert); end; end; end; |
Edit:
Ich habe mal Aufgabe1 etwas umgestellt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Tform1.quadrat(x1,y1,l,ordnung1:integer); begin if ordnung1 <> 0 then begin Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l); quadrat(x1,y1,l div 2, ordnung1-1); quadrat(x1+l div 2,y1,l div 2, ordnung1-1); quadrat(x1,y1+l div 2 ,l div 2,ordnung1-1); quadrat(x1+l div 2, y1+l div 2, l div 2, ordnung1-1); end; end; |
Im Endeffekt habt ihr es effizienter gemacht (d.h. er muss weniger zeichnen). Aber das hier ist ein besserer Ausgangspunkt für die andren Aufgaben
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 21.01.11 14:56
Ich habs geschafft:
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:
| procedure Tform1.quadrat4(x1,y1,l,ordnung:integer; rotiert: boolean); begin if ordnung <> 0 then begin if rotiert then begin Image1.Canvas.MoveTo( round(X1+0.5*l) , Y1); Image1.Canvas.LineTo( X1 , round(Y1+0.5*l)); Image1.Canvas.LineTo( round(X1+0.5*l) , round(Y1+l)); Image1.Canvas.LineTo( round(X1+l) , round(Y1+0.5*l)); Image1.Canvas.LineTo( round(X1+0.5*l) , round(Y1)); Image1.Canvas.MoveTo( round(X1+0.25*l), round(Y1+0.25*l)); Image1.Canvas.LineTo( round(X1+0.75*l), round(Y1+0.75*l)); Image1.Canvas.MoveTo( round(X1+0.25*l), round(Y1+0.75*l)); Image1.Canvas.LineTo( round(X1+0.75*l), round(Y1+0.25*l));
quadrat4(round (x1+1/8*l),round (y1+3/8*l),l div 4, ordnung-1, not rotiert); quadrat4(round (x1+3/8*l),round (y1+5/8*l),l div 4, ordnung-1, not rotiert); quadrat4(round (x1+5/8*l),round (y1+3/8*l),l div 4, ordnung-1, not rotiert); quadrat4(round (x1+3/8*l),round (y1+1/8*l),l div 4, ordnung-1, not rotiert); end else begin Image1.Canvas.Rectangle( X1,Y1,X1+l ,Y1+l ); Image1.Canvas.MoveTo( X1 , round(Y1+0.5*l)); Image1.Canvas.LineTo( X1+l , round(Y1+0.5*l)); Image1.Canvas.MoveTo( round(X1+0.5*l) , Y1); Image1.Canvas.LineTo( round(X1+0.5*l) , Y1+l);
quadrat4(x1,y1,l div 2, ordnung-1, not rotiert); quadrat4(x1+l div 2,y1,l div 2, ordnung-1, not rotiert); quadrat4(x1,y1+l div 2 ,l div 2,ordnung-1, not rotiert); quadrat4(x1+l div 2, y1+l div 2, l div 2, ordnung-1, not rotiert); end; end; end; |
Die gibts gratis von mir
Zur Erklärung:
Das Programm biegt bei jeder Rekursionsstufe (also "Aufruftiefe") abwechselnd in eine der beiten if-Zweige ab. Einmal werden Rauten gezeichnet, einmal Rechtecke. Um auf die Zahlenwerte zu kommen, guckt euch mal das Bild im Anhang an.
Einloggen, um Attachments anzusehen!
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 11.02.11 14:19
Das Funktioniert aber irgendwie nicht so wirklich!!!
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Fr 11.02.11 15:23
Informatiklady hat folgendes geschrieben : | Wir haben ein Problem!
Unser Lehrer in der Schule hat uns dies nicht richtig erklärt. |
Ja, ja, immer die bösen Lehrer (manchmal auch als "Pauker" verunglimpft). Auf Dritte, die sich nicht wehren können, schimpfen. Es ist ja so leicht, anderen die Schuld zu geben.
Bevor Du Dich zu solchen Urteilen aufschwingst, was tatest Du, was tatet Ihr dazu, um das "Problem" anzugehen?
Konnte wirklich keiner der Schüler seinen Ausführungen folgen? Dann wäre es in der Tat ein ziemlich objektiver Gradmesser dafür, daß die Erklärungen defizitär waren. Falls es doch welche gab, die folgen konnten, dann sieht die Schuldfrage hingegen längst nicht so eindeutig aus.
Außerdem fehlt in Deinem Beitrag irgendein Hinweis, was konkret nicht verstanden wurde bzw. bei was wir hier helfen könn(t)en.
Einfach nur eine PDF über einen Verweis hier hingerotzt....Vergiß nicht (oder sei Dir hiermit erstmalig dessen bewußt), daß all' die, die hier helfen, das altruistisch und i.d.R. auch in ihrer Freizeit tun. Ein wenig mehr Entgegenkommen wäre mithin angebracht.
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 11.02.11 19:21
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 18.02.11 13:10
Hier ist unsere Projektarbeit die wir bis jetzt haben!!
Einloggen, um Attachments anzusehen!
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 18.02.11 18:43
Du musst das ganze Projekt anhängen, nicht nur die DPR. Am besten als Zip-Datei packen. Vor allem die Unit ist wichtig (Unit1.pas), denn dort steht euer Quellcode drin.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Dude566
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Fr 18.02.11 19:44
Wie wäre es hier mit: www.delphi-treff.de/tutorials/grundlagen/ ?
So Fehlermeldungen wie: "Das funktioniert nicht!!!!!", sind ja schrecklich!
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 28.02.11 14:59
Das ist das Programm was wir bis jetzt erstellt haben bwz. die Unit
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: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213:
| type TForm1 = class(TForm) Panel1: TPanel; Figur1: TButton; Figur2: TButton; Figur8: TButton; Figur3: TButton; Figur4: TButton; Figur5: TButton; Figur6: TButton; Figur7: TButton; Image1: TImage; FigurLoeschen: TButton; Abbrechen: TButton; Eingabe: TEdit; procedure FigurLoeschenClick(Sender: TObject); procedure AbbrechenClick(Sender: TObject); procedure Figur1Click(Sender: TObject); procedure Figur2Click(Sender: TObject); procedure Figur4Click(Sender: TObject); procedure Figur3Click(Sender: TObject);
private
procedure quadrat(x1,y1,l,ordnung1:integer); procedure quadrat2(x1,y1,l,ordnung:integer); procedure quadrat3(x1,y1,l,ordnung2:integer); procedure pv(r,th: real); procedure fraktaleLinie(ordnung: integer; l, th:real); procedure quadrat4(x1,y1,l,ordnung3:integer);
public end;
var Form1: TForm1;
implementation procedure Tform1.quadrat(x1,y1,l,ordnung1:integer); begin if ordnung1 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l) else begin quadrat(x1,y1,l div 2, ordnung1-1); quadrat(x1+l div 2,y1,l div 2, ordnung1-1); quadrat(x1,y1+l div 2 ,l div 2,ordnung1-1); quadrat(x1+l div 2, y1+l div 2, l div 2, ordnung1-1);
end;
end; procedure TForm1.quadrat2(x1,y1,l,ordnung:integer); begin if ordnung = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l) else if ordnung=1 then begin quadrat2(x1,y1,l div 2, ordnung-1); quadrat2(x1+l div 2,y1,l div 2, ordnung-1); quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1); quadrat2(x1+l div 2, y1+l div 2, l div 2, ordnung-1); end else begin quadrat2(x1,y1,l div 2,0) ; quadrat2(x1+l div 2,y1,l div 2, ordnung-1); quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1); quadrat2(x1+l div 2, y1+l div 2, l div 2, 0); end; end;
procedure TForm1.quadrat3(x1,y1,l,ordnung2:integer); begin if ordnung2 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l) else if odd(ordnung2) then begin quadrat3(x1,y1,l div 2, ordnung2-1) ; quadrat3(x1+l div 2,y1,l div 2, 0); quadrat3(x1,y1+l div 2 ,l div 2,0); quadrat3(x1+l div 2, y1+l div 2, l div 2,ordnung2-1);
end else begin quadrat3(x1,y1,l div 2, 0); quadrat3(x1+l div 2,y1,l div 2, ordnung2-1); quadrat3(x1,y1+l div 2 ,l div 2,ordnung2-1); quadrat3(x1+l div 2, y1+l div 2, l div 2, 0); end; end;
procedure Tform1.pv(r,th: real); var rad: real; begin rad := th*pi/180; with Image1.Canvas do lineTo(round(penpos.x + r*cos(rad)), round(penpos.y + r*sin(rad))); end;
procedure TForm1.fraktaleLinie(ordnung: integer; l, th:real); begin if ordnung = 0 then pv(l,th) else Begin fraktaleLinie(ordnung - 1, l,th); end; end;
procedure TForm1.quadrat4(x1,y1,l,ordnung3:integer); var l1,l2:integer; begin if ordnung3=0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l) else if odd(ordnung3) then begin quadrat4(x1,y1,l div 2, ordnung3-1) ; quadrat4(x1+l div 2,y1,l div 2, 0); quadrat4(x1,y1+l div 2 ,l div 2,0); quadrat4(x1+l div 2, y1+l div 2, l div 2,ordnung3-1)
end; end;
{$R *.dfm}
procedure TForm1.FigurLoeschenClick(Sender: TObject); begin Image1.canvas.Brush.Color:=clwhite; Image1.Canvas.Rectangle(-1,-1,image1.Width+1,image1.Height+1); end;
procedure TForm1.AbbrechenClick(Sender: TObject); begin close; end;
procedure TForm1.Figur1Click(Sender: TObject); VAR x,y,o:INTEGER; BEGIN Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1); Image1.Canvas.brush.Color:=clwhite; o:=Strtoint(Eingabe.text); x:=image1.Width; y:=image1.Height; IF image1.Height>Image1.Width THEN y:=image1.Width ELSE x:=image1.Height; image1.canvas.rectangle(0,0,0+x,0+x); quadrat(0,0,x,o);
end;
procedure TForm1.Figur2Click(Sender: TObject); VAR x,y,o:INTEGER; BEGIN Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1); Image1.Canvas.brush.Color:=clwhite; o:=Strtoint(Eingabe.text); x:=image1.Width; y:=image1.Height; IF image1.Height>Image1.Width THEN y:=image1.Width ELSE x:=image1.Height; image1.canvas.rectangle(0,0,0+x,0+x); quadrat2(0,0,x,o);
end;
procedure TForm1.Figur4Click(Sender: TObject); VAR x,y,o,ordnung,l,l1,l2:INTEGER; r:boolean; BEGIN Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1); Image1.Canvas.brush.Color:=clwhite; o:=Strtoint(Eingabe.text); x:=image1.Width; y:=image1.Height; IF image1.Height>Image1.Width THEN y:=image1.Width ELSE x:=image1.Height; image1.canvas.rectangle(0,0,0+x,0+x); ordnung:=4; l:=625; Image1.Canvas.moveTo(625, 150); Image1.canvas.pen.color:=clblack; fraktaleLinie(ordnung,L,0); fraktaleLinie(ordnung,L,90); fraktaleLinie(ordnung,L,180); fraktaleLinie(ordnung,L,270); Image1.Canvas.moveTo(625,250 ); l1:=round(sqrt(sqr(l/2)+sqr(l/2))); fraktaleLinie(ordnung,L1,-45); fraktaleLinie(ordnung,L1,45); fraktaleLinie(ordnung,L1,135); fraktaleLinie(ordnung,L1,-135); Image1.Canvas.moveTo(625 +l div 4, 250 - l div 4); l2:=round(sqrt(sqr(l1/2)+sqr(l1/2))); fraktaleLinie(ordnung,l1,45); Image1.Canvas.moveTo(625 +l div 4, 250 + l div 4); fraktaleLinie(ordnung,l1,-45);
end;
procedure TForm1.Figur3Click(Sender: TObject); VAR x,y,o:INTEGER; r:boolean; BEGIN Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1); Image1.Canvas.brush.Color:=clwhite; o:=Strtoint(Eingabe.text); x:=image1.Width; y:=image1.Height; IF image1.Height>Image1.Width THEN y:=image1.Width ELSE x:=image1.Height; image1.canvas.rectangle(0,0,0+x,0+x); quadrat3(0,0,x,o); end;
end. |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 28.02.11 15:41
Zu Aufg 1,2 und 3:
Das sieht doch sehr gut aus, solange die Rekursionstiefe nicht zu tief ist...dann machen sich die Rundungsfehler von div bemerkbar
Deshalb am besten 2^Rekursionstiefe als Größe nehmen, mal einen beliebigen Faktor:
Delphi-Quelltext 1: 2:
| MaxRekursionstiefe:=6; quadrat(0,0,8*round(power(2,MaxRekursionstiefe),6); |
(Edit: noch math oben bei den uses einbinden)
Aufg 4 könnt ihr von mir oben übernehmen.
Aufg 5 ist dazu ganz ähnlich.
Aufg 6 ist wieder einfacher. Ihr müsst dort nur in jedem Schritt Rechtecke zeichnen, nicht erst in der untersten Ebene.
Aufg 7 ist etwas schwierig...da müsste man sich mal reindenken. Die Quadrate werden jeweils in 4 Teile geteilt, während die Rechtecke entsprechend anders aufgeteilt werden.
Aufg 8 ist wieder wie 4, nur dass ihr dort nicht um 90 Grad dreht, sondern um 45. Es geht also nichtmehr mit einem Boolean wie in Aufg 4
Edit:
Was ihr also bereits habt, sieht doch gut aus. Wenn ihr Probleme habt, dann müsst ihr die genauer schildern. "Funktioniert nicht"...da kann ich keine kompetente Antwort drauf geben
Edit2:
Zu eurer Lösung zu 4 (mit der Fraktalen Linie) kann ich garnichts sagen...das ist mir zu kompliziert...polarvektor?
Ich glaub ihr denkt nach wie vor zu kompliziert. Ihr müsst nicht alles bei Ordnung=0 zeichnen. Ihr könnt bereits vorher zeichnen. Bsp:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.quadrat42(x,y,l,ordnung: integer); begin Image1.Canvas.Rectangle(x,y,x+l,y+l); if ordnung>=0 then quadrat42(x+2,y+2,l-4,ordnung-1); end;
procedure TForm1.Button1Click(Sender: TObject); begin quadrat42(50,50,100,20); end; |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 04.03.11 13:43
Also wir haben es jetzt geschafft die Figur 4 zu programmieren jetzt bin ich dabei die nummer 5 zu programmieren nur der ansatz fehlt mir.
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 04.03.11 15:27
Ok, als Ansatz würd ich da so vorgehen:
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:
| Procedure Quadrat5_1( X,Y: integer; Width: integer; rekursionstiefe: integer); begin Width:=Width div 2; RauteZeichnen(X,Y,Width); RauteZeichnen(X+Width,Y,Width); RauteZeichnen(X+Width,Y+Width,Width); RauteZeichnen(X,Y+Width,Width); Quadrat5_2(X,Y,Width,rekursionstiefe-1); Quadrat5_2(X+Width,Y,Width,rekursionstiefe-1); ... end;
procedure Quadrat5_2( X,Y: integer; Width: integer; rekursionstiefe: integer); begin Image1.Canvas.Rectangle( X+1/8*Width,Y+3/8*Width,2/8*Width ,2/8*Width ); [...]
Quadrat5_1( X+1/8*Width,Y+3/8*Width,2/8*Width ,2/8*Width, rekursionstiefe-1 ); [...] end; |
Im Anhang eine Illustration für die Werte in procedure Quadrat5_2
Einloggen, um Attachments anzusehen!
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Informatiklady
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 18.03.11 13:33
Hallöchen !!
Kann das vllt sein , dass du da statt der Figur 4 die 5 gemacht hast .... hab mir das mal angeschaut ... sieht mit den 8teln und der raute eher nach 4 aus !!
lg
|
|
|