Autor Beitrag
McDonalds-Inder
Hält's aus hier
Beiträge: 3

Win 2000
D6 Pers
BeitragVerfasst: Di 17.05.05 11:06 
kuckuck
hab da ma ne frage:
wie kann man bei mandelbrot in delphi das Zeichnen beschleunigen( z.B. durch Spiegeln oder so)???

danke schon mal an alle, die antworten!!!
würd uns sehr helfen


Moderiert von user profile iconraziel: Topic aus Sonstiges verschoben am Di 17.05.2005 um 12:45
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Di 17.05.05 12:14 
indem man einem nordwest antarktischen laubfrosch am begin einen rüssel transplantiert und am end. zwei engelsflügel :? :wink: :mrgreen:

aber im ernst:
mit den paar infos kann dir hier wohl kaum einer weiter helfen.
was hast du denn bisher gemacht? wie sieht deine bisherige zeichen-funktion aus?
was möchtest du überhaupt zeichnen? bilder, symbole, ein paar geometrische funktionen?

gruß von meinem curry-bigmac

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Der Bear
Hält's aus hier
Beiträge: 12

Win XP Professional SP2
D6 Personal
BeitragVerfasst: Di 17.05.05 12:53 
Hallo, würde mich auch mal interessieren!

habe mir den alten Mandelbrot-Thread durchgelesen (www.delphi-forum.de/viewtopic.php?t=7588) und mich würd auch interessieren wie ich jetzt das scanline genau anwenden muss. Die Onlinehilfe ist nicht so ganz aufschlussreich, und ich arbeite auch das erste Mal mit Grafik.

Mein Programm: Ein TImage der Breite 628p, was ein pi darstellt. Mit einer TrackBar kann die gewünschte Frequenz eingestellt werden, woraufhin er das Image neu zeichnet (für jeden x-Wert den zugehörigen sinuswert = x&y des Image).
Das ganze dauert jedoch relativ lange (20Hz: ~0.45s, 100Hz: ~2.15s ), weshalb ich es gerne optimieren möchte.

Vielen Dank für comments!

_________________
Das menschliche Gehirn eignet sich nicht zum Denken und diente ursprünglich vermutlich dazu das Blut zu kühlen. Es hält Grösse allein für erstaunlich.
Neuromancer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
BeitragVerfasst: Di 17.05.05 16:59 
@McDonalds-Insider:

Nun ja, wie du die Achse spiegelst, dürfte ja wohl kein Problem darstellen. Sobald du weißt, dass du dich in einer symmetrischen Zahlenebene befindest, kannst du davon ausgehen, dass auch der "grafische Inhalt" dieser Zahlenebene symmetrisch sein wird (zumindest beim Standard-Apfelmännchen z = z² + c).

Was deiner Anwendung allerdings einen gehörigen Boost verschaffen könnte, ist das Ausprogrammieren einer sogenannten Color-Guessing-Engine.
Die Idee dahinter ist folgende:
Am rechenintensivsten sind diejenigen Operationen innerhalb der Menge, die den Bailout nicht erreichen. Hier muss jedes mal bis zur Iterationsgrenze iteriert werden. Beim Standard-Apfelmännchen also die schwarze Menge - das eigentliche Apfelmännchen. Und genau das braucht am meisten Zeit.
Also gibt es folgende Möglichkeit, hier ein wenig cleverer vorzugehen: Berechne nicht jeden Punkt in der Ebene einzeln, sondern berechne nur die Eckpunkte eines größeren "Zahlennetzes". Gemeint sind damit die Punkte "drumherum", also um den Punkt in der Ebene, der untersucht werden soll, im Prinzip also eine kleine Matrix:

ausblenden Quelltext
1:
2:
3:
P11 P12 P13
P21 P22 P23
P31 P32 P33


Anstatt jetzt den Fokus auf P22 zu setzen, dann auf P23 usw. untersuchst du die "Randgebiete" von P22. Also in diesem Fall die Punkte P11, P13, P31 und P33. Wenn alle diese Punkte dieselbe Farbe haben (also nach genau derselben Iterationstiefe den Bailout erreichen), dann kannst du davon ausgehen, dass auch P12, P21, P22, P23 und P32 dieselbe Farbe haben werden. Wenn nicht, dann musst du die Punkte innerhalb der Matrix alle einzeln berechnen.

Die Farben werden hier also nicht alle berechnet, sondern teilweise "erraten".

Natürlich ist es möglich, dass die resultierende Grafik leichte Fehler enthält. Allerdings bringt diese Methode auch einen gehörigen Performance-Boost.

Ich habe mit dieser Hilfe einmal einen Echtzeit-Zoom in ein Apfelmännchen realisiert, der mit knappen 25 fps doch schon recht flüssig lief. Allerdings musste ich es in Assembler realisieren. Mit Delphi (besser gesagt Turbo-Pascal) war da nichts mehr zu machen... ;-)

Gruß