![]() |
Mandelbrot- und Julia-Mengen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute,
Ich habe ein Programm geschrieben, welches die Bilder der Mandelbrot- und Julia-Mengen berechnet. Veröffentlicht habe ich das Programm, weil ich denke, dass mir vielleicht geholfen werden kann, denn es gibt zwei Dinge, die ich einfach nicht mehr verbessern kann, aber gerne verbessern möchte. Wenn ihr also meinen Quell-Code nachvollziehen könnt und euch das Programm angesehen habt, fänd ich es toll, wenn ihr mir sagen könntet, wie man die Leistung des Programmes doch verbessern könnte. Bei manchen Bildern muss man nähmlich echt Gedult haben, bevor man sie bestaunen darf. Desweiteren habe ich Probleme einen Fehler zu beheben, der auf dem Bild "MandelbrotSonne***" zu sehen ist. Ich hoffe ihr könnt mir helfen und sonst noch irgendwie Verbesserungsvorschläge geben, da mir viel an diesem Programm liegt. Euer Arukas |
Re: Mandelbrot- und Julia-Mengen
Lang ists her, da musst ich auch mal in einem Beleg diese Dinger programmieren.
Mir ist übrigens grad die Lust vergangen, in dem Code ein bisschen rumzustöbern, da es ungewöhnlich und vor allem sehr schwer leserlich ist: - eine Funktion, auch wenn sie noch so kurz ist, in einer Zeile abzuhandeln (ich hab erst nicht gesehen, dass hinter der deklaration noch Code kommt) - eine if..then..else Anweisung in eine Zeile zu schreiben - die Forms, Units, Buttons, etc einfach nur durchzunummerieren - jede Codezeile in der ersten Spalte (also vorn) zu beginnen ...alles schlecht Soweit dazu. Bitte ändere das. Ansonsten sehe ich globale Variablen. Die sollte man vermeiden. Weiter blicke ich noch nicht durch, da die Formatierung "ungenügend" ist. Du musst nicht perfekt formatieren. Ich stimme auch nicht mit allen aus dem ![]() Beispiel ------------ Du:
Delphi-Quellcode:
Ich:
procedure TForm1.Button1Click(Sender: TObject); begin StartCRIT(); end;
procedure TForm1.gagga(ECy:Integer); VAR a,b,c,d,v:real; j,t:Integer; begin ECy:=ECy; If (ECy>ImgY)or(ECy<0) then begin EDyD:=0; Eite:=Eite+25; If round(Eite/EiteM*100)<=100 then N01.Caption:=IntToStr(round(Eite/EiteM*100))+'%' else N01.Caption:='100%'; if Eite>EiteM then begin Timer3.Interval:=0; Timer4.Interval:=0; Timer5.Interval:=0; Timer6.Interval:=0; end; end else begin
Delphi-Quellcode:
Abgesehen, von den Bezeichnern, ist dies auch nicht ganz Styleguide, aber ich hasse es z.B. ein "begin" auf die nächste Zeile zu setzen. Es ist so zumindest leichter lesbar, und vor allem die Struktur erkennbar.
procedure TForm1.Button1Click(Sender: TObject);
begin StartCRIT(); end; procedure TForm1.gagga(ECy:Integer); VAR a,b,c,d,v:real; j,t:Integer; begin ECy:=ECy; If (ECy>ImgY)or(ECy<0) then begin EDyD:=0; Eite:=Eite+25; If round(Eite/EiteM*100)<=100 then N01.Caption:=IntToStr(round(Eite/EiteM*100))+'%' else N01.Caption:='100%'; if Eite>EiteM then begin Timer3.Interval:=0; Timer4.Interval:=0; Timer5.Interval:=0; Timer6.Interval:=0; end; end else begin Edit: Die bilder hast du natürlich schön hinbekommen. Auch wenns lange dauert. Nebenbei, was machen eigentlich die 4 Timer? |
Re: Mandelbrot- und Julia-Mengen
Ja, schaut schon mal recht klasse und sauber aus. Nun hab ich mir nicht die ganzen Units dazu angeschaut. ;)
Wenn du ein paar Ideen suchst gib doch mal in der Suche Apfelmännchen, Julia oder Mandelbrot ei und schau was da so kommt. ;) ( ![]() |
Re: Mandelbrot- und Julia-Mengen
hi,
erstmal danke für die Antworten. Ich werd die Kritik zum Quell-Code in Zukunft sehr ernst nehmen und beachten. Ich wusste nicht, dass es da Richtlinien gibt (bin ein blutiger Anfänger). Ich hab die kurzen If then else.. Zeilen deswegen so zusammengefasst, weil ich es mag, alles in einem Blick zu haben.... Dazu schonmal danke, Zu den vier Timern: Ich hatte sogar mal 10 Timer drin, weil ich dachte, wenn 10 Timer gleichzeitig 1000 mal pro Sekunde arbeiten, dass ich dann ne höhee Leistung erziele,... Falsch gedacht. Jetzt hab ich nur noch 4, weil ich es irgendwie cooler finde, wenn die Bilder von zwei Seiten gleichzeitig aufgebaut werden. |
Re: Mandelbrot- und Julia-Mengen
Hi
Du sagst, du baust das Bild per Timer auf, dann gehe ich davon aus, dass du die Berechnungen auch darin durchführst. Windows XP schafft ein Timer-Intervall von rund 10ms, Windows 9x eines von rund 50ms. Wenn du die Berechnungen in einer Schleife durchführen würdest, dann wäre das ganze zig mal schneller. Natürlich ist der Aufbau-Effekt dann nicht mehr gegeben. Aber auf den kommt's ja eigentlich nicht an. ;) Edit: Ich habe gerade keine Zeit, deinen Code durchzusehen. |
Re: Mandelbrot- und Julia-Mengen
Zitat:
Richtige Richtlinien gibt es nicht ... es ind mehr Vorschläge wie man es machen könnte ... niemand hindert dich daran es auch anders zu machen (sirius hällt sich ja auch nicht ganz daran). Aber eine gewisse "Grundformatierung/Gleichmäßigkeit" sollte schon vorhanden sein, denn sonst ist es halt schwer in dem QT durchzusehen. hier in der DP gibt es auch schon einige Themen/Meinungen dazu z.B.: ![]() [add] (rote Box???) Zitat:
|
Re: Mandelbrot- und Julia-Mengen
Zitat:
Und es ist immer noch ein Unterschied, ob du das Programm mal schnell selbst und nur für dich schreibst, oder ob du willst, das andere (oder du ein einem Jahr) damit noch arbeiten sollen. Aber für "Anfänger" ist ja ne Menge drin. Du benutzt ja schon die Windows-Api! |
Re: Mandelbrot- und Julia-Mengen
Zitat:
|
Re: Mandelbrot- und Julia-Mengen
Hi...
Zitat:
Delphi-Quellcode:
Damit wäre der Aufbau Effekt gegeben.
while not finish do
begin Berechne; Male; // Entweder das: Form.Repaint; // oder das: Image.repaint // oder das: Application.ProcessMessages // Wie lange soll gewartet werden: Sleep(wait); end; Und mit der Variable wait, kann man dann angeben, wie schnell dieser Effekt sein soll... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz