Zum Inhalt springen

Visual Basic 6: Grafik

Aus Wikibooks

Zurück zu Visual_Basic_6

Grafikfunktionen

[Bearbeiten]

Farben

[Bearbeiten]

Konstanten

[Bearbeiten]

Selbst mixen mit RGB()

[Bearbeiten]

Pixel setzen: PSet

[Bearbeiten]

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.

Linien zeichen: Line

[Bearbeiten]

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


Rechtecke

[Bearbeiten]
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

Kreise und Ellipsen: Circle

[Bearbeiten]

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

Bilder zeichnen: PaintPicture

[Bearbeiten]

Farben: Das Experimentieren mit Paletten

[Bearbeiten]

Funktionsdarstellung mit der Scale-Methode

[Bearbeiten]

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.

Gaußsche Normalverteilung als Grafik

[Bearbeiten]

Analog 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

[Bearbeiten]

Wenn 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

[Bearbeiten]

Wenn 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

[Bearbeiten]

Will 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

[Bearbeiten]

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 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: