Fraktale programmieren mit Visual Basic 2010 von SelMcKenzie Selzer-McKenzie
Video:
EIN
FRAKTAL:
Dim Schleifendurchlauf As Double ' Anzahl der
Iterationen
Dim a As Double ' Hopalong-Parameter
Dim b As Double ' Hopalong-Parameter
Dim c As Double ' Hopalong-Parameter
Dim x As Double ' Hopalong-Parameter
Dim y As Double ' Hopalong-Parameter
Dim i As Double ' Iterationsvariable
Dim yy As Double ' Hopalong-Parameter
Dim xx As Double ' Hopalong-Parameter
Dim Abbildungsgrösse
As Double ' Größe der Abbildung
Dim Farbzählung As Integer ' Farb-Berechnung
Dim Sprungwert As Double ' Farb-Berechnung
Dim Für1 As Double : Für1 = Val(TextBoxFraktal101.Text) 'Anzahl
Schleifendurchlauf
'100.000 ist schnell, kann mehrere Millionen
sein, aber dann schöne Fraktale, aber lange Rechenzeit
Dim Für2 As Double : Für2 = TextBoxFraktal102.Text
Dim Für3 As Double : Für3 = TextBoxFraktal103.Text
Dim Für4 As Double : Für4 = TextBoxFraktal104.Text
Dim Für5 As Double : Für5 = Val(TextBoxFraktal105.Text)
Dim Für6 As Double : Für6 = Val(TextBoxFraktal106.Text)
Dim
Abstand_links_oben As Integer : Abstand_links_oben = 300
Dim Abstand_von_unten : Abstand_von_unten =
300
xx = 0
yy = 0
x = 0
y = 0
Farbzählung = 0
'Den Variablen werden die in den TextBoxen
gespeicherten Werte zugeordnet.
'Die Werte in den TextBoxen können vom
Anwender vor dem Start einer neuen Grafik geändert werden
a = CInt(Für2)
b = CInt(Für3)
c = CInt(Für4)
Schleifendurchlauf = Für1
Sprungwert = Für6
Abbildungsgrösse = Für5
For dieSchleife = 1 To
Schleifendurchlauf
If Farbzählung > 255 Then Farbzählung = 1 'Die Variable
„counter“ sorgt für die Änderung der Farben beim Zeichnen
Zeichnen.FillRectangle(New SolidBrush(System.Drawing.Color.FromArgb(255 -
Farbzählung, _
Farbzählung, 127 + Farbzählung /
2)), New Rectangle(10 * x /
Abbildungsgrösse + Abstand_links_oben, 10 * y / Abbildungsgrösse +
Abstand_von_unten, 1, 1))
'Die Hopalong-Formel:
xx = y - Math.Sign(x) * Math.Sqrt(Math.Abs(b * x - c))
'Ein kleiner "Trick" zum
sprunghaften Ändern der Farben
If Math.Abs(x - xx) < Sprungwert Then
Farbzählung =
Farbzählung + 1
End If
'Weiterer Teil der Hopalong-Formel
yy = a - x
'Dies sind Alternativen zur obigen Zeile, die
ebenfalls interessante Ergebnisse liefern:
'können auch stillgelegt werden
yy = b - x
yy = a + b - x
yy = a - b - x
yy = b * b - x
yy = Math.Sqrt(a * b) - x
'Weiterer Teil der
Hopalong-Formel
x = xx
y = yy
Next dieSchleife
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
EIN ANDERES FRAKTAL:
Dim yyy As Integer ' Äußere Schleifenvariable zum Zeichnen
Dim xxx As Integer ' Innere Schleifenvariable zum Zeichnen
Dim i As Integer ' Innerste Schleifenvariable zur Iteration
Dim buffer As Double ' Speichervariable für Zeichenmode 2
Dim xx As Double ' Variable für
Hopalong-Algorithmus
Dim yy As Double ' Variable für
Hopalong-Algorithmus
Dim x As Double ' Variable für
Hopalong-Algorithmus
Dim y As Double ' Variable für
Hopalong-Algorithmus
Dim farbwert As Integer ' Farb-Umrechnung
Dim flag As Byte ' Schaltvariable für Zeichenmode 2
' ##################################
Parameter ############################################
Dim breite As Integer = 600 ' Bildbreite (Darf geändert werden)
Dim höhe As Integer = 400 ' Bildhöhe (Darf geändert werden)
Dim innenschleife As Integer ' Maximaler
Iterationswert; Festgelegt in TextBox 5
Dim a As Double ' Hopalong-Parameter und gleichzeitig linker
oberer Startpunkt (X) der Grafik
Dim b As Double ' Hopalong-Parameter und gleichzeitig linker
oberer Startpunkt (Y) der Grafik
Dim c As Double = 32.234 ' Dritter Parameter für die
Hopalong-Gleichung. Darf verändert werden.
' Hier können andere Werte jedoch zu völlig
anderen Ergebnissen führen
Dim stap As Double ' Über Textbox 3 änderbar: Schrittweite bzw.
Auflösung
Dim graphmode As SByte = -1 ' Kann mit Button 2 in
1 geändert werden
Dim schwelle As Double ' Nur relevant für grafikmodus 2
Dim farbfaktor As Integer ' Kann geändert werden
'Abfrage der in den TextBoxen gespeicherten,
vorgegebenen Variablen
a = TextBoxFraktal201.Text ' Über Textbox 1
änderbar / Startkoordinate X
stap = TextBoxFraktal203.Text ' Über TextBox 3
änderbar / Auflösung
schwelle = TextBoxFraktal204.Text ' Über TextBox 4
änderbar / Schwelle für mode 2
innenschleife = TextBoxFraktal205.Text ' Über TextBox 5
änderbar / Anzahl der Iterationen
farbfaktor = TextBoxFraktal206.Text ' Über TextBox 6
änderbar / Verwandlung der Rechenergebnisse in Farben
For yyy = 1 To breite ' Erste, äußere Verschachtelungsebene:
Bildbreite: X-Koordinate
a = a + stap 'Inkrementierung des
Parameters a um den Wert stap (z.B. 0,004)
b = TextBoxFraktal202.Text 'Neue
"Zeile": b muss auf Anfangswert zurückspringen und wird neu
incrementiert
For xxx = 1 To höhe ' Zweite Verschachtelungsebene:
Bildhöhe: ’ Y-Koordinate zum Zeichnen
b = b + stap 'Inkrementierung des
Parameters b um den Wert stap
buffer = 0 ' Farbwertberechnung:
Buffer-Reset
xx = 0 ' Hoplaong-Parameter Reset
yy = 0 ' Hoplaong-Parameter Reset
x = 0 ' Hoplaong-Parameter Reset
y = 0 ' Hoplaong-Parameter Reset
For i = 1 To innenschleife 'Dritte, innere
Verschachtelungsebene
' Hoplaong-Schleife -
Kann von ca. 100 bis unbegrenzt variiert werden
' Hopalong-Gleichung:
xx = y - Math.Sign(x) * Math.Sqrt(Math.Abs(b * x - c))
yy = a - x
' Berechnung der Farbe
des zu zeichnenden Pixels
' Zwei Methoden zur
Farbberechnung: Graphmode 0 und 1. Der Modus kann von der
' Benutzeroberfläche aus gewählt werden.
' Mode 1: Speichern
des höchsten Wertes in „buffer“
If graphmode = -1 Then
If x > buffer Then buffer = Math.Abs(x)
End If
' Mode 2: Abbruch der
Schleife bei Erreichen eines Schwellenwertes
If graphmode = 1 Then
flag = 1
If Math.Abs(x) > schwelle Then
If flag = 1 Then
buffer = i 'Schleifenwert i wird
in Buffer gespeichert
Exit For 'Schleife wird
verlassen
End If
End If
flag = 0
End If
' Teil der
Hopalong-Gleichung:
x = xx
y = yy
Next i 'Ende der inneren Schleife zur Berechnung
eines einzigen Punktes
' Umrechnung in Farbwert. Variable
"farbfaktor" kann in TextBox 6 geändert werden
farbwert = CInt(farbfaktor *
buffer)
If farbwert > 511 Then farbwert = 511
If farbwert > 255 And farbwert <
512 Then farbwert =
farbwert - 256
' Es folgt das Zeichnen des
betreffenden Farbpixels an den Koordinaten yyy und xxx.
' Der Einsatz der Variablen
"farbwert" als rgb-Werte ist nur ein Beispiel.
' Die besten Ergebnisse lassen sich mit
Paletten-Arrays erzielen, in denen zu jedem Wert
' der Variablen "farbwert"
die jeweiligen RGB-Werte gezielt nach Gesichtspunkten der
' optimalen Wahrnehmung bzw. der
Ästhetik eingetragen sind.
Zeichnen.FillRectangle(New SolidBrush _
(System.Drawing.Color.FromArgb(farbwert,
125 + farbwert / 2, 255 - farbwert)), _
New Rectangle(yyy, xxx, 1, 1))
Next xxx
Next yyy
Keine Kommentare:
Kommentar veröffentlichen
Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.