Visual Basic 6: Grafik
Zurück zu Visual_Basic_6
Inhaltsverzeichnis |
[Bearbeiten] Grafikfunktionen
[Bearbeiten] Farben
[Bearbeiten] Konstanten
[Bearbeiten] Selbst mixen mit RGB()
[Bearbeiten] Pixel setzen: PSet
PSet (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.
[Bearbeiten] Linien zeichen: Line
Line(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
[Bearbeiten] Rechtecke
Private 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
[Bearbeiten] Kreise und Ellipsen: Circle
Me.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
[Bearbeiten] Bilder zeichnen: PaintPicture
[Bearbeiten] Farben: Das Experimentieren mit Paletten
[Bearbeiten] Funktionsdarstellung mit der Scale-Methode
Im 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.
[Bearbeiten] Gausssche Normalverteilung als Grafik
Analog der Funktionsdarstellung weiter oben, kann man eine Gaussche Normlverteilung als Funktion darstellen.
Siehe auch 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
[Bearbeiten] Gaussfunktion mit variierendem Parameter a
Wenn man sehen will welchen Einfluß der Parameter a in der Gaussfunktion 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
[Bearbeiten] Gaussfunktion mit variierendem Parameter b
Wenn man sehen will welchen Einfluß der Parameter b in der Gaussfunktion 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
[Bearbeiten] Gaussfunktion mit Erwartungswert und Standdardabweichung
Will man die Gaussfunktion entlang der x-Achse verschieben, dann muß 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 Standdarabweichung.
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 Gausssche 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:
[Bearbeiten] Gaussfunktion mit variablem Erwartungswert und Standdardabweichung
Will 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 Gausssche 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: