Hallo AutoIt.de Forum,
durch einen Vortrag im Mathe-Unterricht (Thema: Komplexe Zahlen) erfuhr ich von Fraktalen.
Das Apfelmännchen, entdeckt durch Benoît Mandelbrot, ist das wohl bekannteste Fraktal.
Also dachte ich mir: Mensch das code ich jetzt nach.
Es ist schwerer als man denkt, obwohl das Script relativ kurz gehalten ist.
Das Hauptproblem war: Das ganze zu verstehen und umzusetzen.
Lange Rede, kurzer Sinn:
Da es mit einer "relativ niedrigen" Auflösung arbeitet ist das Ergebnis dementsprechend ziwmnlich qualitativ unwertig, ich setze mich demnächst trotzdem mal daran es in höherer Qualität rendern zu lassen (an sich kann das jeder selbst machen, er brauch halt nur die Werte ändern.)
[Blockierte Grafik: http://img213.imageshack.us/img213/7608/mandelbrotfraktal.png]
Hier seht ihr das Apfelmännchen
[Blockierte Grafik: http://img205.imageshack.us/img205/3343/mandelbrotfraktal2.png]
Hier noch einmal, geringere Präzision bei höherer Auflösung -> Blitz besser erkennbar
Sourcecode
#include <GDIPlus.au3>
#include <Array.au3>
_GDIPlus_Startup()
Global $Coordinate[600][500]
Global $zOld[2] = [0, 0]
Global $TempzOld[2]
Global $c[2] = [0, 0]
$GUI = GUICreate("Apfel", 600, 500)
GUISetState()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($GUI)
_GDIPlus_GraphicsDrawLine($hGraphic, 0, 250, 600, 250)
_GDIPlus_GraphicsDrawLine($hGraphic, 200, 0, 200, 500)
_GDIPlus_GraphicsDrawLine($hGraphic, 600 / 3 + 600 / 3, 500 / 2 + 5, 600 / 3 + 600 / 3, 500 / 2 - 5)
_GDIPlus_GraphicsDrawLine($hGraphic, 599, 500 / 2 + 5, 599, 500 / 2 - 5)
For $iWidth = -200 To 600
For $iHeight = -250 To 500
$zOld[0] = 0
$zOld[1] = 0
For $iB = 1 To 100
$TempzOld[0] = $zOld[0]
$TempzOld[1] = $zOld[1]
$c[1] = $iHeight * (2 / 500)
$c[0] = $iWidth * (3 / 600)
$zOld[0] = (($TempzOld[0] * $TempzOld[0]) - ($TempzOld[1] * $TempzOld[1])) - $c[0]
$zOld[1] = (($TempzOld[0] * $TempzOld[1]) * 2) - $c[1]
If $iB <= 100 And Sqrt((_Betrag($zOld[0]) * _Betrag($zOld[0]) + (_Betrag($zOld[1]) * _Betrag($zOld[1])))) < 2 Then
Else
;MsgBox(0, "", $zOld[0]&@CRLF&$zOld[1]&@CRLF&$c[0]&@CRLF&$c[1]&@CRLF&Sqrt((_Betrag($zOld[0]) * _Betrag($zOld[0]) + (_Betrag($zOld[1]) * _Betrag($zOld[1])))))
ExitLoop
EndIf
;MsgBox(0, "", $zOld[0]&@CRLF&$zOld[1])
If $iB >= 100 Then
_GDIPlus_GraphicsDrawRect($hGraphic, $iWidth - 1 + 200, $iHeight + 250 - 1, 1, 1)
;MsgBox(0, "", $c[0]&@CRLF&$c[1])
EndIf
Next
Next
Next
Func _Betrag($Wert)
If $Wert <= 0 Then Return $Wert * - 1
Return $Wert
EndFunc ;==>_Betrag
Alles anzeigen
Abschließend noch ein großes Danke an BadBunny , der mir die Theorie erklärte und dafür seinen Schlaf opferte