Bild oben: Benutzeroberfläche des erweiterten Programms nach Programmstart und Klick auf "Start". Es wird eine Demo-Berechnung mit voreingestellten Parametern durchgeführt.

 

Zurück

 

Einfache Version

 

Der Code des erweiterten "De Luxe" Programms ist sehr komplex und umfangreich und nicht zum Erklären seines Funktionsprinzips geeignet. Es gibt jedoch noch eine ganz einfache, abgespeckte Version mit relativ kurzem Code, der außerdem umfangreich dokumentiert ist. An diesem Code lässt die die prinzipielle Funktionsweise des Programms relativ gut veranschaulichen. Zusammen mit der gezeigten Oberfläche wird es auch bei diesem Programm erfahrenen VB-Programmierern nicht schwer fallen, sich ihre eigene Software zusammen zu bauen.

Wer an der umfangreicheren Version interessiert ist, kann sich über das rechts abgebildete E-mail-Feld gerne mit mir in Verbindung setzen.

 

Wichtiger Hinweis

 

Beim kopieren des einfachen Codes ist Folgendes zu beachten:

  • Der Code kann nicht als ganze Einheit in den VB-Code-Editor kopiert werden.
  • Erzeugen Sie zuerst über die Toolbox die entsprechenden Buttons und TextBoxen auf der Form.
  • Erzeugen Sie die zu diesen Objekten gehörenden, leeren Funktionen durch anklicken derselben.
  • Kopieren Sie den folgenden Code (ohne Funktionskopf und "End Sub" in die vorbereiteten Funktionshüllen.
  • Öffnen Sie die Property-Pages (F4) zwecks Beschriftung der Buttons und individueller Gestaltung aller Objekte.

Ein '  (Apostroph-Zeichen) vor der Zeile bedeutet: Kommentar. Die Kommentarzeilen werden automatisch grün, wenn man sie in den VB-Editor kopiert.

 

Der Code 

 

 

Public Class Form1

 

    'Simple Version

    'Source Code: Kurt Diedrich

    'For private use only

 

    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 n As Integer

    Dim schluss As Integer  ' Flag für Programmende

    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 = 1200  ' Bildbreite (Darf geändert werden)

    Dim höhe As Integer = 800     ' 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

    Dim Farbarray(256, 3)

    Dim rot As Integer

    Dim grün As Integer

    Dim blau As Integer

 

 

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _

    As System.EventArgs) Handles Button1.Click

 

        'Abfrage der in den TextBoxen gespeicherten, vorgegebenen Variablen

        a = TextBox1.Text                ' Über Textbox 1 änderbar / Startkoordinate X

        stap = TextBox3.Text             ' Über TextBox 3 änderbar / Auflösung

        schwelle = TextBox4.Text         ' Über TextBox 4 änderbar / Schwelle für mode 2

        innenschleife = TextBox5.Text    ' Über TextBox 5 änderbar / Anzahl der Iterationen

        farbfaktor = TextBox6.Text       ' Über TextBox 6 änderbar / Verwandlung der 

        '                                  Rechenergebnisse in Farben (Adapter)

 

        For yyy = 1 To breite ' X-Koordinate zum Zeichnen

 

            Application.DoEvents()

            a = a + stap '                 Inkrementierung des Parameters a um 

            '                              den Wert stap (z.B. 0,004)

            b = TextBox2.Text             'Neue "Zeile": b muss auf Anfangswert / Startkoordinate Y

            '                              zurückspringen und wird neu incrementiert

 

            For xxx = 1 To höhe           'Bildbreite 

                '                          Y-Koordinate zum Zeichnen

 

                b = b + stap 'Inkrementierung des Parameters b um den Wert stap 

 

                buffer = 0   ' Farbwertberechnung: Höchster Wert: 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

                    If schluss = 1 Then End

 

                    ' Hoplaong-Schleife - Kann von ca. 50 bis unbegrenzt variiert werden

                    ' Hopalong-Gleichung:

                    xx = y - Math.Sign(x) * Math.Sqrt(Math.Abs(b * x - c))

                    yy = a - x

 

                    ' Berechnung 

                    ' 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“ (STANDARD)

                    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 > 255 Then farbwert = 256

                rot = Farbarray(farbwert, 0)

                grün = Farbarray(farbwert, 1)

                blau = Farbarray(farbwert, 2)

 

                ' Es folgt das Zeichnen des betreffenden 

                ' Farbpixels an den Koordinaten yyy und xxx.

                ' Die Farben werden aus einer Palette entnommen -siehe "Private Sub Form1_Load"

               

 

                PictureBox1.CreateGraphics.FillRectangle(New SolidBrush _

              (System.Drawing.Color.FromArgb(rot, grün, blau)), New Rectangle(yyy, xxx, 1, 1))

            Next xxx

        Next yyy

 

    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e _

    As System.EventArgs) Handles MyBase.Load

        'Beim Start des Programms werden die Textfelder mit 

        'vorgegebenen Standardwerten gefüllt.

        'Diese Werte können vor einem Start mit dem 

        'Startbutton, so lange das Programm nicht mit Zeichnen 

        ' beschäftigt ist, verändert werden.

 

        TextBox1.Text = 0

        TextBox2.Text = 0

        TextBox3.Text = 0.004

        'TextBox3.Text = "0,004" 'Kommazahlen funktionieren nur, 

        '                        wenn sie als Strings vorgegeben wurden

        TextBox4.Text = 12

        TextBox5.Text = 300

        TextBox6.Text = 8

        Button2.Text = "Mode 2"

 

        'Füllen des Arrays Farbarray

 

 

        For n = 0 To 7

            Farbarray(n, 0) = 0 : Farbarray(n, 1) = 22 : Farbarray(n, 2) = 89

        Next

        For n = 8 To 15

            Farbarray(n, 0) = 0 : Farbarray(n, 1) = 33 : Farbarray(n, 2) = 132

        Next

        For n = 16 To 23

            Farbarray(n, 0) = 0 : Farbarray(n, 1) = 39 : Farbarray(n, 2) = 157

        Next

        For n = 24 To 31

            Farbarray(n, 0) = 67 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 155

        Next

        For n = 32 To 39

            Farbarray(n, 0) = 94 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 155

        Next

        For n = 40 To 47

            Farbarray(n, 0) = 143 : Farbarray(n, 1) = 0 : Farbarray(n, 2) = 164

        Next

        For n = 48 To 55

            Farbarray(n, 0) = 164 : Farbarray(n, 1) = 0 : Farbarray(n, 2) = 139

        Next

        For n = 56 To 63

            Farbarray(n, 0) = 155 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 98

        Next

        For n = 64 To 71

            Farbarray(n, 0) = 155 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 45

        Next

        For n = 72 To 79

            Farbarray(n, 0) = 168 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 52

        Next

        For n = 80 To 87

            Farbarray(n, 0) = 189 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 58

        Next

        For n = 88 To 95

            Farbarray(n, 0) = 215 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 66

        Next

        For n = 96 To 103

            Farbarray(n, 0) = 230 : Farbarray(n, 1) = 2 : Farbarray(n, 2) = 70

        Next

        For n = 104 To 111

            Farbarray(n, 0) = 252 : Farbarray(n, 1) = 1 : Farbarray(n, 2) = 27

        Next

        For n = 112 To 119

            Farbarray(n, 0) = 252 : Farbarray(n, 1) = 57 : Farbarray(n, 2) = 1

        Next

 

        For n = 120 To 127

            Farbarray(n, 0) = 249 : Farbarray(n, 1) = 27 : Farbarray(n, 2) = 2

        Next

        For n = 128 To 135

            Farbarray(n, 0) = 248 : Farbarray(n, 1) = 65 : Farbarray(n, 2) = 3

        Next

        For n = 136 To 143

            Farbarray(n, 0) = 252 : Farbarray(n, 1) = 101 : Farbarray(n, 2) = 1

        Next

        For n = 144 To 151

            Farbarray(n, 0) = 252 : Farbarray(n, 1) = 146 : Farbarray(n, 2) = 1

        Next

        For n = 152 To 159

            Farbarray(n, 0) = 253 : Farbarray(n, 1) = 177 : Farbarray(n, 2) = 0

        Next

        For n = 160 To 167

            Farbarray(n, 0) = 255 : Farbarray(n, 1) = 194 : Farbarray(n, 2) = 53

        Next

        For n = 168 To 175

            Farbarray(n, 0) = 254 : Farbarray(n, 1) = 220 : Farbarray(n, 2) = 27

        Next

        For n = 176 To 183

            Farbarray(n, 0) = 253 : Farbarray(n, 1) = 248 : Farbarray(n, 2) = 53

        Next

        For n = 184 To 191

            Farbarray(n, 0) = 254 : Farbarray(n, 1) = 248 : Farbarray(n, 2) = 14

        Next

        For n = 192 To 199

            Farbarray(n, 0) = 253 : Farbarray(n, 1) = 249 : Farbarray(n, 2) = 77

        Next

        For n = 200 To 207

            Farbarray(n, 0) = 254 : Farbarray(n, 1) = 251 : Farbarray(n, 2) = 118

        Next

        For n = 208 To 215

            Farbarray(n, 0) = 254 : Farbarray(n, 1) = 252 : Farbarray(n, 2) = 146

        Next

        For n = 216 To 223

            Farbarray(n, 0) = 254 : Farbarray(n, 1) = 252 : Farbarray(n, 2) = 179

        Next

        For n = 224 To 231

            Farbarray(n, 0) = 255 : Farbarray(n, 1) = 252 : Farbarray(n, 2) = 180

        Next

        For n = 232 To 239

            Farbarray(n, 0) = 255 : Farbarray(n, 1) = 255 : Farbarray(n, 2) = 200

        Next

        For n = 240 To 247

            Farbarray(n, 0) = 255 : Farbarray(n, 1) = 255 : Farbarray(n, 2) = 230

        Next

 

        For n = 248 To 255

            Farbarray(n, 0) = 255 : Farbarray(n, 1) = 255 : Farbarray(n, 2) = 255

        Next

 

    End Sub

 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e _

    As System.EventArgs) Handles Button2.Click

        ' Dieser Button schaltet abwechselnd zwischen den beiden 

        ' modi 1 und 2 zum Zeichnen um (Toggle-Betrieb).

        graphmode = -graphmode

        If graphmode = -1 Then Button2.Text = "Mode 2"

        If graphmode = 1 Then Button2.Text = "Mode 1"

    End Sub

 

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e _

    As System.EventArgs) Handles Button3.Click

        schluss = 1

    End Sub

 

   

End Class

 

Zurück