Visual Basic 6: Grafik
Zurück zu Visual_Basic_6
Grafikfunktionen
BearbeitenFarben
BearbeitenKonstanten
BearbeitenSelbst mixen mit RGB()
BearbeitenPixel setzen: PSet
BearbeitenPSet (x, y)[, Farbe]
Mittels PSet können Sie gezielt einen einzelnen Pixel einfärben. Das folgende Beispiel soll zeigen, dass man mit dieser Methode so ziemlich alles zeichnen kann, was man will.
Private Sub Form_Load()
Dim I As Long
Me.AutoRedraw = True
For I = 20 To 200
Me.PSet (I, I / (I - 10) * 50), vbBlack
Next I
End Sub
Über die Eigenschaft DrawWidth des Formulars (oder des Bildfelds) haben Sie die Möglichkeit, die Dicke der Punkte zu beeinflussen.
Allerdings ist PSet relativ langsam, und zieht die Performance in den Keller, wenn man vor hat größere Dinge zu zeichnen.
Linien zeichen: Line
BearbeitenLine(x1,y1) - (x2,y2), a
Mittels Line können Sie gerade Linien von einem Startpunkt zu einem Endpunkt zeichnen. Das folgende Beispiel zeigt wie man ein Kreuz zentriert über das ganze Formular erstellt. Mit a kann zusätzlich die Farbe der Linie angegeben werden.
Private Sub Form_Load()
Me.AutoRedraw = True
Me.Line (Me.Width / 2, 0) - (Me.Width / 2, Me.Height)
Me.Line (0, Me.Height / 2) - (Me.Width, Me.Height / 2)
End Sub
Rechtecke
BearbeitenPrivate Sub Form_Load()
Me.AutoRedraw = True
Me.Line (Me.Width / 4, Me.Height / 4) - (Me.Width / 2, Me.Height/ 2),vbred,b ' Block ~ Rechteck
Me.Line (Me.Width / 4, Me.Height / 4) - (Me.Width / 2, Me.Height/ 2),vbred,bf ' Block ~ Rechteck und f ~ filled
End Sub
Kreise und Ellipsen: Circle
BearbeitenMe.Circle (x, y), Radius, Farbe, -Start, -Ende, Höhe/Breite-Verhältnis
x und y: Koordinaten des Mittelpunktes
Start und Ende: bei Kreisbögen seien sie Anfangs- und Endpunkt des Kreisbogens bezüglich 90° (also dem "rechtesten Punkt") in Bogenmaß (Skalierung und Zeichnung gegen den Uhrzeigersinn). Ist einer der Werte negativ, so wird der entsprechende Punkt zusätzlich mit dem Kreismittelpunkt verbunden.
Höhe/Breite-Verhältnis: Um Ellipsen zu zeichnen, lässt sich hier das Verhältnis von Höhe zu Breite angeben, wobei sich dann der Radius dann immer dem größeren der beiden Werte entspricht.
Beispiel: Rotes "Pizzaviertel"
Me.Circle (1000, 1000), 500, vbRed, -1.5708, -3.1416
Blaue Ellipse
Me.Circle (2000, 1000), 500, vbBlue, , , 2.0
Bilder zeichnen: PaintPicture
BearbeitenFarben: Das Experimentieren mit Paletten
BearbeitenFunktionsdarstellung mit der Scale-Methode
BearbeitenIm folgenden wird ein kleines Programm zur Darstellung mathematischer Funktionen beschrieben.
Siehe auch http://www.madeasy.de/2/prgfunkt.htm
Hinter dem Befehl Koordinatensystem steht folgender Code:
Sub Befehl1_Click ()
Scale (-100, 100)-(100, -100)' Benutzerdefiniertes Koordinatensystem.
Line (-100, 0)-(100, 0)
Line (0, -100)-(0, 100)
End Sub
Hinter dem Befehl Funktion f(x) = x^2 steht folgender Code :
Sub Befehl2_Click ()
DrawWidth = 3
For x = -100 To 100 Step .2
y = x^2 'x * x
PSet (x, y)
Next x
End Sub
Wenn Sie mit dem Programm arbeiten wollen, müssen Sie immer erst auf den Befehl1 drücken und das Koordinatensystem darstellen. dabei wird auch der Scale Befehl aktiviert.
Dann können Sie verschiedene Funktionen beim Befehl 2 eingeben. Spielen Sie mit den einzelnen Größen etwas herum und beobachten Sie wie sich die Grafiken ändern. Im Bild ist die Funktion f(x) = x^2 dargestellt.
Gaußsche Normalverteilung als Grafik
BearbeitenAnalog der Funktionsdarstellung weiter oben, kann man eine Gaußsche Normalverteilung als Funktion darstellen.
Siehe auch https://web.archive.org/web/20160709075409/http://www.madeasy.de/2/gauss.htm
Man braucht eine Form und 2 Befehlsbuttons für das Programm:
Der Code
Sub Befehl1_Click ()
Scale (-5, 5)-(5, -5)' Benutzerdefiniertes Koordinatensystem.
Line (-5, 0)-(5, 0)
Line (0, -5)-(0, 5)
End Sub
Sub Befehl2_Click ()
Dim x As Double, y As Double, e As Double
Drawwidth = 2
e = 2.7182
For x = -2 To 2 Step .01
y = e ^ (-x * x)
'Einfache Gaussformel mit a = 1 und b = 1
PSet (x, y)
Next x
End Sub
Gaußfunktion mit variierendem Parameter a
BearbeitenWenn man sehen will welchen Einfluss der Parameter a in der Gaußfunktion hat, dann variiert man ihn am besten in einer Schleife durch.
Folgendes Beispiel zeigt das Ergebnis:
Sub Befehl1_Click ()
Scale (-5, 5)-(5, -5)' Benutzerdefiniertes Koordinatensystem.
Line (-5, 0)-(5, 0)
Line (0, -5)-(0, 5)
End Sub
Sub Befehl2_Click ()
Dim x As Double, y As Double, e As Double, a as Long
Drawwidth = 1
e = 2.7182
For a = 1 To 5
For x = -5 To 5 Step .01
y = a * e ^ (-x * x)
PSet (x, y)
Next x
Next a
End Sub
Gaußfunktion mit variierendem Parameter b
BearbeitenWenn man sehen will welchen Einfluss der Parameter b in der Gaußfunktion hat, dann variiert man ihn am besten in einer Schleife durch.
Folgendes Beispiel zeigt das Ergebnis:
Sub Befehl1_Click ()
Scale (-5, 2)-(5, -2)' Benutzerdefiniertes Koordinatensystem.
Line (-5, 0)-(5, 0)
Line (0, -5)-(0, 5)
End Sub
Sub Befehl2_Click ()
Dim x As Double, y As Double, e As Double, b As Double
Drawwidth = 1
e = 2.7182
For b = .1 To 5 Step .1
For x = -5 To 5 Step .01
y = e ^ (-b * x * x)
PSet (x, y)
Next x
Next b
End Sub
Gaußfunktion mit Erwartungswert und Standardabweichung
BearbeitenWill man die Gaußfunktion entlang der x-Achse verschieben, dann muss man einen weiteren Parameter einführen. Er wird im Programm als Erwartungswert E bezeichnet. Die Eulersche Zahl wird diesmal mit eu bezeichnet. S ist die Standardabweichung.
Das dazugehörige Programm hat folgenden Code:
Sub Befehl1_Click ()
Scale (-10, 10)-(10, -10)' Benutzerdefiniertes Koordinatensystem.
Line (-10, 0)-(10, 0)
Line (0, -10)-(0, 10)
End Sub
Sub Befehl2_Click ()
Dim x As Double, y As Double, E As Double, eu As Double, S as Double
'E = Erwartungswert von x
eu = 2.718
'eu = eulersche Zahl
'S = Standardabweichung
E = 0: s = .4:
'beliebig angenommene Werte für E den Mittelwert der Glocke und S = die Breite der Glocke
For x = -100 To 100 Step .05
'Formel für die Gaußsche Glockenkurve
y = 1 / (2 * 3.14 * s * s) * eu ^ -(x - E) ^ 2 / (2 * s * s)
PSet (x, y)
Next x
End Sub
Die Grafik sieht dann so aus:
Gaußfunktion mit variablem Erwartungswert und Standardabweichung
BearbeitenWill man verschiedene Parameter von s und E im Programmlauf ändern und ausprobieren, dann kann man noch 2 Textfelder in der Form hinzufügen. In die Textfelder kann man dann E und s eingeben und sich die neue Grafik anschauen.
Der Code dazu:
Sub Befehl1_Click ()
Scale (-10, 10)-(10, -10)' Benutzerdefiniertes Koordinatensystem.
Line (-10, 0)-(10, 0)
Line (0, -10)-(0, 10)
End Sub
Sub Befehl2_Click ()
Dim x As Double, y As Double, E As Double, eu As Double, S as Double
Drawwidth = 2
'E = Erwartungswert von x
E = Val(Text1.Text)
eu = 2.718
s = Val(Text2.Text)
'S = Standardabweichung
For x = -100 To 100 Step .05
'Formel für die Gaußsche Glockenkurve
y = 1 / (2 * 3.14 * s * s) * eu ^ -(x - E) ^ 2 / (2 * s * s)
PSet (x, y)
Next x
End Sub
So sieht der Screenshot aus: