Gå til innhold

Anbefalte innlegg

God natt! :)

 

Jeg sitter her og kjeder meg noe skikkelig! så tenkte jeg skulle få vb til å tegne en fin sinus-kurve for meg! men dette var vist ikke like lett som jeg hadde håpet på. :( er det noen som veit hvordan jeg kan gjøre dette? Og siden Me.line skal ha negative koordinater, hvordan blir det da? for sinuskurven har jo halvparten over 0!

 

Jaja.. håper noen kan hjelpe meg! :)

Lenke til kommentar
Videoannonse
Annonse

Dersom du vil tegne dette inn i et koordinatsstem, kan du eksempelvis gjøre det således:

 

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

 

Public Sub DrawFormular(PicBox As PictureBox, sFormular As String, lngWait As Long, dblXAxis As Double, dblYAxis As Double, Optional dblAccuracy As Double = 1)

 

    Dim ScriptEngine As Object, X As Double, currY As Double, lastY As Double

    Dim lngOrigoX As Long, lngOrigoY As Long

   

    ' Referer skriptmotor til variabel

    Set ScriptEngine = CreateObject("MSScriptControl.ScriptControl")

 

    ' Initialiser motor

    ScriptEngine.Language = "VBScript"

    ScriptEngine.AddCode "Function Y(X)" & vbCrLf & sFormular & vbCrLf & "End Function"

 

    ' Beregn posisjon til origo

    lngOrigoX = PicBox.ScaleWidth / 2

    lngOrigoY = PicBox.ScaleHeight / 2

 

    ' Tegn akser

    PicBox.Line (lngOrigoX, 0)-(lngOrigoX, PicBox.ScaleHeight), vbBlack

    PicBox.Line (0, lngOrigoY)-(PicBox.ScaleWidth, lngOrigoY), vbBlack

 

    ' Start opptegningen

    For X = -dblAccuracy To PicBox.ScaleWidth Step dblAccuracy

 

        ' Regn ut Y-verdi

        currY = lngOrigoY - (ScriptEngine.Run("Y", X - lngOrigoX / dblXAxis) * dblYAxis)

 

        ' Tegn opp punkt på bakgrunn av foregående punkt

        PicBox.Line (X * dblXAxis, currY)-((X - dblAccuracy) * dblXAxis, lastY), vbBlack

       

        ' Lagre verdi til neste opptegning

        lastY = currY

       

        ' Utfør dette kun dersom vent-verdien er spesifisert

        If lngWait >= 0 Then

       

            ' Oppdater PicBox

            DoEvents

           

            ' Vent i angitt tid

            Sleep lngWait

       

        End If

       

    Next

 

End Sub

 

Private Sub Form_Load()

 

    ' Vis form

    Show

 

    ' Start opptegningsprosedyren

    DrawFormular picGraph, "Y = Sin(X)", 10, Me.ScaleWidth / 4, Me.ScaleHeight / 4, 0.01

 

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

 

    ' Terminer applikasjon

    End

 

End Sub

Lenke til kommentar

Nei, du må sette en en PictureBox med navn 'picGraph'.

 

Edit: aadnk, hvorfor valgte du å lage en funksjon med VB-skript? Man trenger vel egentlig ikke en egen funksjon for det i det hele tatt?

Endret av Jonas
Lenke til kommentar
Edit: aadnk, hvorfor valgte du å lage en funksjon med VB-skript? Man trenger vel egentlig ikke en egen funksjon for det i det hele tatt?

Naturligvis ikke, men en slik fremgangsmåte forenkler og allsidiggjør programmeringsprosessen. Dersom en nå har ønske om å implementere mer dynamikk i programmet, eksempelvis ved å la brukeren selv spesifisere formelen som skal opptegnes, blir dette særdeles enkelt gjennomføre.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...