Ossiloscoop

Status
Niet open voor verdere reacties.

wizsardt

Gebruiker
Lid geworden
20 apr 2019
Berichten
9
Beste leden,

Ik heb een cosinus golf die ik van links naar rechts wil laten lopen,
zoals bij een ossiloscoop.
Echter ik weet niet hoe ik dat moet doen met een timer.
De cosinus kromme wordt getlent in een picturebox met de paintmethode.
WF2.PNG
 
Mag het ook en sinus zijn ... ;) het verschil zie je toch niet bij een lopende golf...

Ben niet zo thuis in VB Net, maar Google vertelt het me niet (en VBA is totaal anders.... ;) )
getlent =????

Licht even toe: picturebox met de paintmethode

Ossiloscoop= Oscilloscoop dat weet ik dan weer wel... (tiepvauten worden je vergeven...)
 
Laatst bewerkt:
Hallo Route99, Route66 hier :)

Dank voor de snelle reactie.

Mijn osillocoop, eh ozillo ... eh ocilloscoop wordt getekend in een picturebox

Een picture box in VB is een element waarin je een plaatje kan zetten of waar ie in kan tekenen.
Tekenen gaat in de paint methode


Code:
 Private Sub Pc_Domain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Pc_Domain.Paint
        Dim g As Graphics = e.Graphics
        Dim clr1, clr2, clr3 As Pen
        Dim q, q1 As Double

        Dim Xas, Yas, r, c, s, i, j, ang, t, f, y1, y2, yp1, yp2 As Integer
        Xas = Ph / 2
        Yas = Pw / 2

        q = Math.PI / 180
        q1 = Math.PI / 50
        f = 8
        r = 100
        ang = 135
        c = r * Cos(ang * q)
        s = r * Sin(ang * q)
        t = r * Tan(ang * q)

        clr1 = Pens.DarkGray
        clr2 = Pens.LightGray
        clr3 = Pens.Red

        g.DrawLine(clr1, 0, Xas, Pw, Xas)
        g.DrawLine(clr1, Yas, 0, Yas, Ph)

        For i = -Pw To Pw Step Pw / 75
            g.DrawLine(clr2, 0, i, Pw, i)
            g.DrawLine(clr2, i, 0, i, Ph)
        Next i

        For f = 1 To 50
            For j = -300 To 360 Step 1


                c = r * Cos(f * q1 + j * q) + r * Cos(f * q1 + 3 * j * q) / 3 + r * Cos(f * q1 + 5 * j * q) / 5
                s = r * Cos(f * q1 + (j + 1) * q) + r * Cos(f * q1 + 3 * (j + 1) * q) / 3 + r * Cos(f * q1 + 5 * (j + 1) * q) / 5
                g.DrawLine(clr1, Yas + j, Xas - c, Yas + j + 1, Xas - s)


                g.DrawLine(clr3, Yas + j, Xas - c, Yas + j + 1, Xas - s)



            Next j
        Next f

    End Sub

In de timer kan ik f laten oplopen, waardoor er een nieuwe cosinus wordt getekend iets naar rechts etc.

Code:
 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        f = f = 1
        Me.Refresh()
    End Sub

Maar op één of andere manier wil het niet werken ...
 
DIm f dan als een globale variabele, dus buiten je subs.
 
In de timer kan ik f laten oplopen, waardoor er een nieuwe cosinus wordt getekend iets naar rechts etc.

Code:
 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        f = f = 1
        Me.Refresh()
    End Sub

Maar op één of andere manier wil het niet werken ...


Ik kom uit VBA maar moet
Code:
f = f = 1
niet zijn
Code:
f = f + 1
 
En wil je de definitieve oplossing nog met ons delen?....
 
De oplossing van mijn lopende golf

WalkingWave.JPG

[video=youtube_share;-BzV92MM8d0]https://youtu.be/-BzV92MM8d0[/video]

Code:
Imports System.Drawing.Graphics
Imports System.Math

Public Class Form1
    Dim Pw, Ph, Fw, Fh, Pm As Integer
    Dim x, y, y1, r, f, z, z1, d, j, m As Integer
    Dim dr As Integer
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Width = 810
        Me.Height = 505

        Fw = Me.Width
        Fh = Me.Height

        Pm = 20

        Pw = Fw - 3 * Pm
        Ph = Fh - 4 * Pm

        Pc_Domain.Height = Ph
        Pc_Domain.Width = Pw
        Pc_Domain.Top = Pm
        Pc_Domain.Left = Pm
        Pc_Domain.BackColor = Color.White

        With Bt_Start
            .Left = Pm
            .Top = Fh - 70
            .Width = 100
            .Text = "toTheRight"
        End With

        With Bt_Rvs
            .Left = Pm + 110
            .Top = Fh - 70
            .Width = 100
            .Text = "toTheLeft"
        End With

        With Bt_Stop
            .Left = Pm+220
            .Top = Fh - 70
            .Width = 100
            .Text = "toTheRight"
        End With

    End Sub

    Private Sub Pc_Domain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Pc_Domain.Paint
        Dim g As Graphics = e.Graphics
        Dim clr1, clr2, clr3 As Pen
        Dim q As Double

        Dim Xas, Yas, i, j As Integer
        Xas = Ph / 2
        Yas = Pw / 2

        Timer1.Interval = 10

        clr1 = Pens.DarkGray
        clr2 = Pens.LightGray
        clr3 = Pens.Red

        g.DrawLine(clr1, 0, Xas, Pw, Xas)
        g.DrawLine(clr1, Yas, 0, Yas, Ph)

        For i = -Pw To Pw Step Pw / 75
            g.DrawLine(clr2, 0, i, Pw, i)
            g.DrawLine(clr2, i, 0, i, Ph)
        Next i

        q = Math.PI / 80
        x = 100 * Cos(r * q)
        y = 100 * Sin(r * q)

        For r = -720 To 720
            y = 100 * Cos(m * q + r * q)

            y1 = 100 * Cos(m * q + (r + 1) * q)

            If dr = 1 Then

                g.DrawLine(Pens.Brown, 100 - r, Xas - y, 100 - r - 1, Xas - y1)
            ElseIf dr = 0 Then
                g.DrawLine(Pens.Brown, 100 + r, Xas - y, 100 + r + 1, Xas - y1)

            End If
        Next r

        q = Math.PI / 180
        d = Math.PI / 80

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        m = m + 1
        r = r + 1
        Me.Refresh()
    End Sub

    Private Sub Bt_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Start.Click
        dr = 0
        Timer1.Start()
    End Sub

    Private Sub Bt_Stop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Stop.Click
        Timer1.Stop()
    End Sub

    Private Sub Bt_Rvs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Rvs.Click
        Timer1.Start()
        dr = 1
    End Sub
End Class
 
:thumb::thumb::thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan