Visual Basic 6: Grafik

Zurück zu Visual_Basic_6

GrafikfunktionenBearbeiten

FarbenBearbeiten

KonstantenBearbeiten

Selbst mixen mit RGB()Bearbeiten

Pixel setzen: PSetBearbeiten

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

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


RechteckeBearbeiten

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

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

Farben: Das Experimentieren mit PalettenBearbeiten

Funktionsdarstellung mit der Scale-MethodeBearbeiten

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 GrafikBearbeiten

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 aBearbeiten

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 bBearbeiten

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 StandardabweichungBearbeiten

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 StandardabweichungBearbeiten

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: