AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Mandelbrot- und Julia-Mengen
Thema durchsuchen
Ansicht
Themen-Optionen

Mandelbrot- und Julia-Mengen

Ein Thema von arukas · begonnen am 20. Jan 2007 · letzter Beitrag vom 22. Jan 2007
Antwort Antwort
arukas
Registriert seit: 14. Mär 2006
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
Angehängte Dateien
Dateityp: rar komplexe_zahlen_121.rar (261,1 KB, 109x aufgerufen)
 
Benutzerbild von sirius
sirius

 
Delphi 7 Enterprise
 
#2
  Alt 20. Jan 2007, 18:44
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?
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

 
Delphi 6 Personal
 
#3
  Alt 20. Jan 2007, 18:47
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. )
Matti
  Mit Zitat antworten Zitat
arukas
 
#4
  Alt 20. Jan 2007, 19:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze

 
Turbo Delphi für Win32
 
#5
  Alt 20. Jan 2007, 19:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#6
  Alt 20. Jan 2007, 19:29
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 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.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

 
Delphi 7 Enterprise
 
#7
  Alt 20. Jan 2007, 20:04
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!
  Mit Zitat antworten Zitat
arukas
 
#8
  Alt 22. Jan 2007, 13:10
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
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#9
  Alt 22. Jan 2007, 13:55
Hi...

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...
Fabian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz