So .. ich habe jetzt nochmal Dein PRogramm angeschaut.
Und ich glaube, Du befindest Dich irgendwie auf dem Holzweg. Denke nochmal über Dein weiteres vorgehen nach.
Ich habe also Dein Programm gestartet. Habe "Günstige Startwerte" ausgewählt und es rechnete.
Es ging sehr flott !
Dabei reservierte sich das Programm 397 MB Speicher im
RAM !
Diese 397 MB zeichnest Du als Kurve (wahrscheinlich) in ein TBitmap. Das ganze machst Du ON THE FLY !!!
(und dennoch ist das programm ziemlich flott)
das bedeutet.
Aus meinen Erfahrungen her würde ich folgende Schlüße ziehen, genau kann ich es natürlich nicht testen, da ich Deinen Quelltext nicht vorliegen habe.
Aber:
Punkt 1. Das Reservieren der 397 MB im Hauptspeicher dauert wahrscheinlich sogar länger als das Berechnen der Werte selber !
Das bedeutet, ein zwischenspeichern auf Festplatte wäre sinnlos und würde für eine spätere Analyse keine Vorteile bringen.
Ich weiß nicht genau, wie Du zeichnest. Aber viel viel schneller wird es, wenn Du nicht jeden Punkt zeichnest, sondern nur wenn sich die x und y-Koordinaten der gezeichneten Pixel ändern. Denn die Interaktion mit einem Canvas dauert sehr lange ( auch wenn Du ein TBitmap als Puffer nimmst)
Du schreibst, im Moment wird jeder 200 ste Schritt gezeichnet, dass dürfte bei 397 MB noch viel zu oft sein !
Also bitte nur zeichnen, wenn sich x oder y Koordinate eines Punktes, den Du setzen möchtest, ändert.
Empfehlen würde ich Dir ausserdem nicht auf eine Groubbox zu malen sondern auf eine Paintbox.
Wenn man nämlich bei Dir ein anderes Fenster drüberschiebt, dann wird es grau und das Bild wird nicht neu gezeichnet.
Bei der Paintbox gibt es dafür ein OnPaint Ereignis, wo Du die Möglichkeit hast Dein Bitmap in das Bitmap der Paintbox zu kopieren.
Deine ganze Geschichte flackert auch nicht, dass heißt Du wirst das langsame "doublebufferd" auf true gesetzt haben.
eine flackerfreie Paintbox findest Du hier:
http://www.pjh2.de/delphi/units/index.php?l=de
(TWinPaintBox)
Alles im allem hab ich das Gefühl dass die Berechnungen für einen Computer nichts großartiges sind.
Die Geschicklichkeit Deinerseits liegt nun darin, Deine Analysen die Du machen möchtest, on the fly durchzuführen
Aber bitte nicht alles in Deine berechnungsprocedure reinpacken und schön objectorientiert !!
<edit>
Zitat:
Ein weiteres Prob, das ich hab ist ein Scheibenwischereffekt der Auftritt wenn ich den Planeten mache, er "wischt" über meine Paintbox und löscht somit meine alten Bahnen (natürlich nur die Grafik nicht die berechneten Werte im Array). Und speichern und laden des bildes kommt auch nicht in Frage, auf Grund der grossen Schrittanzahl (monmentan wird jeder 200ste Schritt gezeichnet sh. im Programm unten rechts)
das habe ich gerade noch gefunden. Anscheinend zeichnest Du direkt auf die Paintbox, das ist in Bezug auf die Geschwindigkeit überhaupt nicht günstig.
Du solltest also in ein TBitmap zeichnen (dieses hat ebenfalls ein Canvas Object) und zum Schluß Deiner Zeichnungen das gesamte Bitmap per BitBlt in das canvas der Paintbox kopieren. ( oder alle zig Schritte wenn Du einen "flüssigen" Film sehen möchtest.
Das machst Du auch im OnPaint Ereignis der Painbox.
Wenn Du das nicht willst und ein "wischen" verhindern willst, musst Du das viel langsamere TImage Object nehmen.
viele Grüße
stoxx
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.