Mittwoch, 22. August 2012

Fraktale programmieren mit Visual Basic 2010 von SelMcKenzie Selzer-McKenzie



 
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.