Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Buddhabrot - Theoretische Frage (https://www.delphipraxis.net/182217-buddhabrot-theoretische-frage.html)

Neutral General 9. Okt 2014 19:04

Buddhabrot - Theoretische Frage
 
Hallo,

Hatte heute mal Lust ein Programm zu schreiben was ein Buddhabrot generiert.

Laut Algorithmus soll man immer zufällige Punkte auswählen durch die man dann iteriert.
Habe ich gemacht - funktioniert. Aber warum überhaupt zufällig? Könnte man nicht auch genauso gut alle Bildpunkte (mehrmals) von Anfang bis Ende durchlaufen? Was ist der Grund für den Zufall?

himitsu 9. Okt 2014 19:18

AW: Buddhabrot - Theoretische Frage
 
Hab da auch keine Erklärung gefunden,
aber du könntest es doch mal ausprobieren?

Zwei Bilder neben-/übereinander legen, wovon Eines mit dem Zufall gefüllt ist
und das Andere bekommt vorgegebene Werte.

Anzahl der Punkte durch 5-10% der Werte des ersten Bildes nehmen und diese Werte dann eben 20-10 Mal durchgehen.
Oder gib dem Ding doch mal einfache Funktionen rein. (Sinus, Sägezahn, Rechteck)
Bei Sinus und Sägezahn vielleicht auch mal mehrere Varianten -> nur eine Schwingung, bzw. mehrere Schwinungen.

Namenloser 9. Okt 2014 20:43

AW: Buddhabrot - Theoretische Frage
 
Sieht so aus, als wäre der deutsche Artikel aus dem englischen Artikel übersetzt worden – im Original steht an der Stelle „random“, was in dem Fall wohl „beliebig“ heißen soll. Alle Pixel systematisch durchzugehen und die jeweiligen Koordinaten als Samples zu verwenden ist ja auch gewissermaßen „beliebig“... schließlich liegen dazwischen ja noch unendlich viele andere ebenbürtige Punkte. So interpretiere ich das zumindest.

Neutral General 10. Okt 2014 07:54

AW: Buddhabrot - Theoretische Frage
 
@Namenloser: Jaaa, aber habe auch einen Artikel auf einem Blog gefunden bei dem sogar vorgeschlagen wird einen besseren Zufallszahlengenerator zu verwenden als den den die meisten RTLs mitbringen:

Zitat:

2. Use a good random number generator. The default random number generators in most compilers have a fairly low period of values before they start repeating the same numbers again. For the Buddhabrot you need a random number function that can return a huge number of random values before they start repeating. A good (and fast) generator I use is the Mersenne Twister.
Aber ich kann mir wie gesagt auch nicht wirklich vorstellen was es für einen Unterschied macht ob/wie zufällig die Punkte sind. letztendlich wird nach einer gewissen Zeit sowieso (fast) jeder Punkt durchlaufen sein und dann hätte man auch ohne Zufall arbeiten können oder nicht? :gruebel:

@himitsu: Ich werde heute Abend bzw. am Wochenende wahrscheinlich mal ein paar Tests dazu machen. Habe gestern erstmal meinen Test-Spaghetticode in ordentlichen Code umgewandelt und heute schau ich mal was es mit dem Zufall auf sich hat.

Medium 10. Okt 2014 09:15

AW: Buddhabrot - Theoretische Frage
 
Ein anderer Zufallsgenerator wird da ja auch nur deswegen angeraten, weil man bei solchen kürzerer Periodenlänge recht früh anfängt die selben Punkte nochmals durchzuiterieren. Auf die Verteilung der Werte bezieht es sich gar nicht.

Ich denke, du müsstest problemlos auch durch ein fixes Raster das Nirvana erreichen können. Das würde ich dann aber deutlich feiner wählen als nur pro Pixel einen Punkt, so ein paar zigtausend bis millionen sollten es schon sein für ansehnliche Bildchen.

Ich habe das mal gemacht als gerade die Core2Duos am Markt waren. Anfangs war ich immer etwas verwundert, warum mein Programm nicht lief. Dann habe ich gemerkt, dass es einfach nur eeeeecht lange gedauert hat, bis man etwas erkennbares zu sehen bekam :). Da lief dann die Kiste auch schon mal die Nacht durch für hübsche Varianten. Ich glaube dort aber auch nicht viel optimiert zu haben. Hach, Studium. Da gabs noch Zeit für solche Nettigkeiten :cyclops:

Neutral General 10. Okt 2014 10:12

AW: Buddhabrot - Theoretische Frage
 
Momentan mache ich es so dass ich zufällige Punkte auswähle die durch die ich dann X-mal iteriere und das mache ich momentan solange bis der Benutzer keine Lust mehr hat.

http://i.imgur.com/81urIu4.png

Das ist mein 1000 (oder 100?) Iterationen pro Punkt-Bild. Es sieht schon ganz gut aus aber auf Wikipedia sieht das alles irgendwie kräftiger/detailierter aus. Und ich habe das Programm schon ne gute Zeit laufen lassen. Aber ab dem Stand hat sich nicht mehr wirklich was getan. Oder muss ich das 12 Stunden laufen lassen bis die Farben kräftiger werden? Oder liegt es am Delphi Standard-random? Das Bild ist 800x800 Pixel. Mein Array war aber 4x oder 8x größer (für ein schöneres Bild)

Ansonsten läufts ganz gut. Ich probiere es heute mal mit einem festen Raster von Zahlen.

Falls jemand ne Idee hat woran es liegen kann dass mein Buddhabrot (bei gleicher Iterationszahl) weniger detailiert/kräftig ist als das was man auf Wikipedia sieht dann wäre das super :)

Medium 10. Okt 2014 11:12

AW: Buddhabrot - Theoretische Frage
 
Das sieht doch schon ziemlich gut aus! Ich denke das was du mit dem Aussehen meinst liegt mit daran, wie viel Deckung du jedem einzelnen Pixel gibst. Letztlich also nur eine Frage des Mappings des Zählerarrays auf das Bitmap. (Man muss z.B. auch nicht linear mappen. Eine Potenz führt z.B. zu einer Kontrasterhöhung.)

HPB 11. Okt 2014 11:10

AW: Buddhabrot - Theoretische Frage
 
Guten Tag Neutral General,
mags Du den Quellcode hier posten?
Ich und sicherlich auch andere Forenteilnehmer, wäre sehr interessiert um mich in der Grafik-Programmierung
weiter zubilden.
Ich benutze Delphi nur aus Hobby.
Mit Gruß
HPB

Neutral General 12. Okt 2014 13:00

AW: Buddhabrot - Theoretische Frage
 
Hallo HPB,

Kann ich machen aber der Code ist noch nicht fertig bzw. in einem Zustand der vorzeigbar ist :mrgreen:
Wenn der Code soweit in Ordnung ist dann kann ich den auch gerne hier posten :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 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