Im Folgenden haben Sie die Möglichkeit, zwei verschiedene Versionen (Exe-Dateien) des hier vorgestellten Programms herunter zu laden, die auf allen gängigen Windows-Rechnern funktionieren müssten:
Eine einfache-Version und eine Deluxe-Version. Bei Interesse an einer Anleitung zu diesem Programm bitte über die angegebene Email-Adresse melden.
Bild oben: Benutzeroberfläche des erweiterten Programms nach Programmstart und Klick auf "Start". Es wird eine Demo-Berechnung mit voreingestellten Parametern durchgeführt.
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:
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