Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Mandelbrot- und Julia-Mengen (https://www.delphipraxis.net/84721-mandelbrot-und-julia-mengen.html)

arukas 20. Jan 2007 17:54


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

sirius 20. Jan 2007 18:44

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
StyleGuide überein. Aber für jemanden, der den Code nicht geschrieben hat, ist es eine echte Zumutung sowas lesen zu müssen. Und wenn man nicht muss,... wirst du keine Antworten bekommen.


Beispiel
------------
Du:
Delphi-Quellcode:
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
Ich:
Delphi-Quellcode:
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
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.

Edit: Die bilder hast du natürlich schön hinbekommen. Auch wenns lange dauert.
Nebenbei, was machen eigentlich die 4 Timer?

turboPASCAL 20. Jan 2007 18:47

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. ;)

( TheMandelbrötchen. ;) )

arukas 20. Jan 2007 19:21

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.

Matze 20. Jan 2007 19:27

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.

himitsu 20. Jan 2007 19:29

Re: Mandelbrot- und Julia-Mengen
 
Zitat:

Zitat von arukas
Zu den vier Timern:...

Na ja, ob nun z.B. 10 Timer mit 100%-CPU-Last arbeiten, oder nur 4 ... von der maximalen/gemeinsamen Rechenleistung her bleibt es doch gleich.


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.: Hier im Forum suchenStyleGuide

[add]
(rote Box???)

Zitat:

Zitat von ich ^^
PSDK > ms-help://MS.PSDKXPSP2.1033/sysinfo/base/windows_time.htm

Platform SDK: Windows System Information

Windows Time

Windows time is the number of milliseconds elapsed since the system started running. This format exists primarily for backward compatibility with 16-bit Windows. To ensure that applications designed for 16-bit Windows continue to run successfully, the GetTickCount function returns the current Windows time.


You typically use GetTickCount to compare the current Windows time with the time returned by the GetMessageTime function. GetMessageTime returns the Windows time when the specified message was created. GetTickCount is limited to the resolution of the system timer.

The system timer runs at approximately 10ms.
Windows Me/98/95: The system timer runs at approximately 55ms.
Windows NT 3.1: The system timer runs at approximately 16ms.

If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.

Windows time is stored as a 32-bit value, which means the system can record no more than 2^32 millisecond intervals before the 32-bit value overflows to zero. This is approximately 49.7 days. If you use Windows time, check for the overflow condition when comparing times.

You can use the System Up Time performance counter to obtain the time elapsed since the computer was started.


sirius 20. Jan 2007 20:04

Re: Mandelbrot- und Julia-Mengen
 
Zitat:

Zitat von arukas
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,

Naja, wie auch himitsu schon erwähnte, du musst dich nicht hundertprozentig an StyleGuide halten. (Mach ich ja auch nicht, da ich meinen eigenen Stil vor über einem Jahrzehnt entwickelt habe). Aber gerade das Einrücken (wie auch immer du es machst) erlaubt schonmal den Ablauf leichter zu erfassen. Und lange Zeilen sind auc doof. Ständig hin und her zu scrollen, macht keinen Spaß.

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!

arukas 22. Jan 2007 13:10

Re: Mandelbrot- und Julia-Mengen
 
Zitat:

Zitat von sirius
Aber für "Anfänger" ist ja ne Menge drin. Du benutzt ja schon die Windows-Api!

naja, hab mir eigentlich alles von anderen Programmen aus diesem Forum abgeguckt, aber danke XD

xZise 22. Jan 2007 13:55

Re: Mandelbrot- und Julia-Mengen
 
Hi...

Zitat:

Zitat von Matze
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. ;)

Also ich kenne das Fenster nicht, aber man könnte es so machen:
Delphi-Quellcode:
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;
Damit wäre der Aufbau Effekt gegeben.
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