Visual Basic: Sinusfunktion zeichnen!

T&T

Lieutenant
Registriert
Feb. 2005
Beiträge
692
Hallo,

ich bin Maschinenbaustudent (2.Semester) und wir haben an der FH grade angefangen ein bisschen mit VB zu programmieren, also ich bin noch Anfänger. Haben grad Prüfung in Informatik geschrieben und da musste man halt nen Sinus (mit einem gültigen VB-Code) zeichen(die Prüfung musste man auf nen Blatt Papier vollziehen, also nicht am PC). Ich habs natürlich daheim gleich ausprobiert was ich da hingezaubert habe, und die nüchterne Erkenntniss es funktioniert nicht:(

Naja, egal es gab noch einige andere Aufgaben die ich bestens konnte: Aber nun zum eigentlichen Thema. Diesen Sinus zu zeichnen läßt mir einfach keine Ruhe und sitzt schon einige Stunden vor dem PC und versuche es hinzubekommen, aber bis jetzt ohne Erfolg. Hab auch mal gegoogelt aber leider auch nix, also wende ich mich an euch.

Also ich will nen den Sinus in der Picturebox1 zeichnen und zwar in 0<=x<=2*PI mit der Periodenanzahl p (textbox1.text). dazu hab ich schon den mathe "code" geladen damit ich den Sinus nicht mit einer Reihenentwicklung selbest erstellen muss.

Wir haben bisher nur gerade Linien gezeichnet, also ne Line zwischen den Punkten (x1;y1) und (x2;y2) =>graph.drawline(Pen,x1,y1,x2,y2)

Ich wollte da ne for schleife reinhauen (for i=0 to 2*PI...) für sin(i), leider funktioniert das nicht, weil VB i in den Schritten 1,2,3 usw. zählt und dann kein flüssiger Graph sondern nur Striche rauskommen. Also muss ich den Sin irgendwie anders zeichnen, aber ich weiß nicht wie, also wer kennt sich ein bisschen aus und weiß ich das machen könnte?

Danke schon mal!

gruß T&T


Code:
Imports System.Math

Public Class Form1

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZeichnen.Click

        'Dimensionierung
        Dim p As Single                 'Periodenanzahl der Sinusfunktion
        Dim b As Single                 'Periozität des Sinus (y=sin(b*x+c))
        Const PI As Double = 3.1415296  'PI
        Dim scaleX As Single            'Skalierung x-Achse
        Dim scaleY As Single            'Skalierung y-Achse
        Dim i As Short                  'Laufvariable
        Dim y1 As Single                'Hilfsvariable
        Dim y2 As Single                'Hilfsvariable


        Dim graph As System.Drawing.Graphics = PictureBox1.CreateGraphics   'Graph
        Dim pen As New System.Drawing.Pen(System.Drawing.Color.Black)       'Stift

        'Skalierung
        scaleX = (PictureBox1.Width - PictureBox1.Margin.Left - PictureBox1.Margin.Right) / (2 * PI)
        scaleY = (PictureBox1.Height - PictureBox1.Margin.Top - PictureBox1.Margin.Bottom) / 2

        'Einlesen der Angabe
        p = TextBox1.Text
        b = 2 * PI / p

        'graph Zeichnen

        For i = 0 To 2*PI
            y1 = Sin(i * b)
            y2 = Sin((i+1) * b)
            graph.DrawLine(pen, i * scaleX, y1 * scaleY, (i + 1) * scaleX, y2 * scaleX)


        Next i

    End Sub


        


    Private Sub btnBeenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBeenden.Click
        Me.Close()
    End Sub
End Class
 
Die for Schleife erlaubt die Angabe des Schlüsselworts step um die Inkrementierung festzulegen.
 
hallo Simpson474,

danke für deine Antwort, aber eine Frage:
wie muss ich dann die Schleife schreiben?
entwa so: for i=0 to 2*PI step 0.0001

leider funktioniert das nicht, aber ich habe s mittlerweile geschafft, dass er mir die sinuskurve(mit der richtigen Periozität) als Zick-Zack Kurve darstellt, d.h. ich muss nur eine geringere Abstände zwischen den einzelnen Zeichenpunkten hineinbekommen und dann klappts:) Wahrscheinlich geht das auch mit dem step, aber wie?

gruß T&T
 
Die Variable i muss dann natürlich Floating-Point sein (ich glaube single heißt das in VB).
 
Danke Simpson474 du hast mir sehr geholfen, jetzt klappts und ich habe meine Sinusfunktion:)
 
Zurück
Oben