AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Buddhabrot
Thema durchsuchen
Ansicht
Themen-Optionen

Buddhabrot

Ein Thema von Eichhoernchen · begonnen am 28. Sep 2005 · letzter Beitrag vom 12. Okt 2005
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Eichhoernchen
Registriert seit: 22. Apr 2004
Es ist noch kein fertiges Programm was ich euch hier Präsentieren möchte, es sind eher Codeschnipsel mit nem schnell gebastelten Programm zusammen!

Und zwar geht es um die Buddhabrotmenge...(nicht Butterbrot)

Es ist ein Fraktal(denke ich zumidest, ist ja schwer zu definieren)

Hier estmal ein paar Bilder wie das aussieht:
BILD1 (Gefärbt)
Bild2
Bild3
Bild4
Missglückter färbeversuch

Den Namen hat es wegen seiner Buddha ähnlichen Form.
Also ich finde das recht cool.

So erstmal zum Buddhabrot, es hat was mit der Mandelbrotmenge zu tun, wie man glaub ich sehen kann.

Und zwar ist die Buddhabrotmenge sowas wie eine Karte der Punkte C der Mandelbrotmenge die Divergieren(d.h. nicht zur Menge gehören).
Als erstes sucht man sich ein zufälliges C, danach lässt man dieses C den Mandelbrotmengen Algorithmus durchlaufen, wenn das C nach N Iterationen noch zur Menge gehört, wird ein neues C gesucht und von vorne gestartet, wenn das C aber nicht dazu gehört, wird die Iteration wiederholt, und alle Atraktoren, die Punkte die z anspring( z = z² + c) werden markiert, bzw. das array an dieser Stelle wird um 1 erhöht.

Leider entstehen erst brauchbare Bilder wenn man dies sehr oft tut. Bei ca 5 Millionen Iterationen des Hauptalgorithmus, also nicht von der Mandelbrotmenge entsteht ein brauchbares schwarz/weiß Bild. Wenn man jetzt noch gern ein farbiges Bild hätte benötigt man gleich 3 Arrays (r, g, b). Für farbige Bilder sind Fluchtiterationen(die Iterationen der Mandelbrotmenge) deutlich höher zu setzen als für schwarz/weiß Bilder. Bsp.: 10000 Fluchtiteratioen, wenn der Punkt C unter 100 Iterationen divergiert gehört er zum Rot teil der Menge und das Rot array wird erhöht. Wenn C unter 1000 und über 100 Iterationen divergiert gehört C zum Gelb teil und das Gelb array wird erhöht. Und das Blaue bei 10000 und > 1000.
Anschließend wird nur noch duch ein einfaches verfahren die arrays als r, g, b Teil eines Bildes dargestellt.

Für grobe Bilder wie Bild3 oder Bild2 kann man mit einer Rechenzeit von ca 10-20 Minuten rechnen(AMD 3000+) mit Bildern wie Bild 1 muss man schon mit 1,5 Stunden Rechenzeit rechnen. Und das Bild was ich zur Zeit berechne ist schon seit 3 Stunden am Rendern (und noch nichtmal uir hälfte fertig).

Naja ihr könnt euch ja mal den Code anschauen, ich habe noch andere Färbeversuche jetzt im Programm, diese sollten aber kein Problem sein wegzudenken!
Angehängte Dateien
Dateityp: zip buddhabrot_174.zip (552,8 KB, 186x aufgerufen)
 
Benutzerbild von MiniKeks
MiniKeks

 
Delphi 7 Professional
 
#2
  Alt 28. Sep 2005, 20:39
Ich hab mal den Code Geguckt..

Geiles Teil

Aber wenn du die Progressbar rausnimmst, wird es Deutlich (!) Schneller
  Mit Zitat antworten Zitat
Benutzerbild von MiniKeks
MiniKeks

 
Delphi 7 Professional
 
#3
  Alt 28. Sep 2005, 20:40
Ich könnte sonst mal meinen 2 PC Ein richtig grosses Teil Rechnen lassen, wenn du mir die Werte sagst, die ich Eingeben soll
  Mit Zitat antworten Zitat
Eichhoernchen

 
Turbo Delphi für Win32
 
#4
  Alt 28. Sep 2005, 21:01
hmm ja wenn die Progressbar raus ist weiß ich aber net wie weit ich bin, kann ganz schön doof sein sag ich dir!


Hmm also ich mache gerade mit 500000000 Buddhaiterationen und 10000 Fluchtiterationen und ab 20 iterationen soll aufgemalt werden!

Bin jetzt ca. bei der Hälfte. Bin echt gespannt was da noch so rauskommt!


Ich bin mir auch nicht sicher ob die Progressbar mir nicht alles versaut weil die kann ja glaub ich nur interger und ich hab ja einfach ganz braun auf int64 gesetzt. Nicht das mir das gleich wegen dem ollen Ding abnippelt.(und das tollste ist wenn das autodefrag anspring und meint die CPU gehöre ihm ganz alleine, dann ist es langsam, aber der ganze PC da musste es erstmal schaffen eins von beiden zu killen!)

Ich hab schon überlegt so ne art Net-Render zu bauen damit ich mehrere PC's gleichzeitig rendern lassen kann...
Ein PC gibt die C's vor und die andern rechnen sie aus, aber da kümmer ich mich rum fals ich die Farbgebung so hinbekomme wie ich das gern hätte.
Jan
  Mit Zitat antworten Zitat
Eichhoernchen

 
Turbo Delphi für Win32
 
#5
  Alt 28. Sep 2005, 21:15
Und morgen mach ich mal das Gegenteil, da zeichne ich auf diese Art mal alle Punkte die dazugehören auf. Da solle ja ne mandelbrotmengen ähnliches gebilde rauskommen. Nur das auf dem Mandelbrotkörper große Ballungsräume sein müssen. Ich hab noch nen anderes Programm geschrieben das zeigt mit Punkten an wenn man mit der Maus über die mandelbrotmenge geht wo, die Punkte hinspringen, so wie das hier: Atraktorsprünge

ohh da ist bei wikipedia sowas wie ich meine so ne umgekehrte Buddhamenge wohl aussehen wird: Umgekehrt?!
Jan
  Mit Zitat antworten Zitat
paresy

 
Delphi 2007 Professional
 
#6
  Alt 28. Sep 2005, 22:19
Wär cool, wenn du das Programm auf Multithreading/MultiCPU optimierst, damit ich meinen Dual Xeon 3Ghz mal vollständig auslasten kann

Grüße, paresy
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

 
Delphi 6 Personal
 
#7
  Alt 29. Sep 2005, 00:27
Zitat von Eichhoernchen:
Es ist noch kein fertiges Programm was ich euch hier Präsentieren möchte, es sind eher Codeschnipsel mit nem schnell gebastelten Programm zusammen!
Hm, na ja, also ich habe es getestet und wusste erst gar nicht so recht welchen Knopf ich wann und wo drücken soll.

Du solltest die From im OI unter Position poScreenCenter einstellen oder zumindest poDefaultPosOnly einstellen. Es haben nicht alle einen 21" grossen Monitor

Die Eingabe von Werten kann zu Gleitkommafehlern führen... Ausserdem fehlt ein Abbruchknopf.

Das soll keine Kretik sein, nur eine Anregung.

Zitat von Eichhoernchen:
Und zwar geht es um die Buddhabrotmenge...(nicht Butterbrot)
Mandelbrot oder Sesambrotchen ?
Matti
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#8
  Alt 29. Sep 2005, 04:24
Schönes Programm Mit Fraktalen triffst du bei mir immer den richtigen Nerv.

Ich habe an dem Teil mal ein wenig gefummelt. Es ist nun erheblich schneller. Folgende Dinge habe ich geändert:
  • Du hast jeden Punkt 2 Mal iteriert. Ein mal um zu sehen ob er escaped, und das 2. Mal wenn nötig für die Darstellung. Ich habe es nun so gemacht, dass bei der Escape-Berechnung alle Punkte in einem Array schon gespeichert werden, so dass im Falle des Zeichnens nur noch das Array durchgegeangen wird. Das spart unheimlich!
  • Sämtliches "Extended" und "Int64" rausgeschmissen. Wir brauchen keine hoch wissenschaftliche Genauigkeit. Das ganze ist reines Eye-Candy, und einen sichtbaren Unterschied gibt's nicht. Gerade das Rechnen mit Extended ist (gegenüber Single wie jetzt) eine sehr starke Bremse.
  • Ich habe das mit dem Random entfernt. Jetzt wird das Bild Pixelweise durchlaufen, die diese dann als Startwerte "c" umrechnet. "Buddahiterationen" wurde zu "Genauigkeit", womit sich nun einstellen lässt ob nun pro Pixel 1 (1) oder pro Pixel 2 (2) Samples itereiert werden sollen etc. (sind Floats, also gehts auch < 1). Das führt zudem zu einer symmetrischen Darstellung, auch bei kleiner Genauigkeit.
  • Umstellung auf Graphics32. Das aber eigentlich nur, weil ich es lieber mag als mit Scanline rumzudoktern
  • Diverse Aufrufe von "StrToX" in Schleifen aus der Schleife raus gezogen, und im Vorhinein in passende Variablen geschrieben. Auch nicht zu unterschätzen beim Speed . (Bei der Farbberechnung hab ich für Methode 1 die Editfelder ganz raus gelassen, und fix 255 eingebaut. Das war, weil ich zu faul war das in eine Variable zu packen =). Der Unterschied zu vorher ist irre. Die anderen Methoden habe ich im Wesen nicht geändert.)
  • Für die Iterationsberechnungen habe ich meine "QMath.pas" eingesetzt (die auch in meinem CQParser mitspielt). Gibt auch noch mal einen kleinen Boost, da handmade Assembler (macht aber den Kohl nicht fett...).
  • (Code ein wenig Styleguidekonformität verpasst. Macht ihn zur Runtime nicht schneller, aber schneller zu lesen 8))

Und ich fange auch schon wieder zu spinnen an . Man könnte das Teil mit meinem CQParser bauen, und somit ließe sich nicht nur die klassische Mandelbrotmenge mit z0=z1²+c verwursten, sondern man könnte beliebige Formeln nehmen (lassen!). Und mit Juliasets dürfte das doch im Grunde auch gehen...
Ach menno - nun hab ich wieder schlaflose Nächte

Schönen Gruss,
Fabian
Angehängte Dateien
Dateityp: zip buddhabrot_668.zip (267,8 KB, 102x aufgerufen)
Fabian K.
  Mit Zitat antworten Zitat
Eichhoernchen

 
Turbo Delphi für Win32
 
#9
  Alt 29. Sep 2005, 06:26
Ja, den erste Punkte habe ich genauso umgesetzt wie du im Nachhinein, ich wusste nicht wie lange es dauert ein Array nochmal durchzugehen und in ein anderes zu schreiben!
2. Hmm, wusste ich nicht
3. Ja das zu entfernen hab ich auch schon gemacht, hab aber keinen geschwindigkeitsunterschieg gemerkt!
4. Man kanns auch übertreiben
5. war meine faulheit^^
6.
7. So wie es da geschrieben ist hab ich es in der Schule gelernt und wenn man sicht das 1 mal angewöhnt hat macht man es so und der code ist auch gut zu lesen find ich persönlich, aber das ist ja geschmackssache!!


Ich find es aber cool das das so viele Interessiert!!!
Jan
  Mit Zitat antworten Zitat
Eichhoernchen

 
Turbo Delphi für Win32
 
#10
  Alt 29. Sep 2005, 06:31
So, hab jetzt gerade mal durch einen code geflogen, das mit der schreibweise mag ich gar nicht ^^

Aber gut find ich das die itertation wo abgebrochen wir gemert wird un dann nur bis da,
gefallen tut mir nicht so der Typ TComplex, das macht es einiges schwerer zu verstehen finde ich, denn ich weiß net das TComplex so ist^^. Hab jtezt leider keine Zeit mehr ich muss in die Schule
Jan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 06:59 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