Announcement

Collapse
No announcement yet.

Daten visuell Aufbereiten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Daten visuell Aufbereiten

    Hallo zusammen,
    ich habe wohl ein kleines Problem und hoffe ihr könnt mir Helfen.
    Über die Serielle-Schnittstelle bekomme ich Daten "String" rein diese möchte ich
    visuell in Form einer Sinuskurve/Oszilloskop da stellen.
    Das empfangen und zerlegen der Daten funktioniert super, und Zeichnen kann ich die Daten auch ein mal aber danach hängt es bei mir.
    in einem PointF-Array stehen 64 Werte die eine Amplitude darstellen.
    Jetzt würde ich halt gerne haben das meine Amplitude nach Links läuft sprich alte Werte entfernt werden und neue Angehängt werden....
    Hat da jemand eine eine Idee/Infos wie ich das machen könnte?
    Vielleicht gehe ich das ja auch total Falsch an.
    Anbei der Code mit dem ich den die ersten Werte einmal Zeichen.

    [highlight=vbnet]
    Private Sub DrawMyGraph()


    Dim x0 As Integer = 50
    Dim Y0 As Integer = (PictureBox1.Height / 2)

    Dim Scale_y As Integer = (PictureBox1.Height / 2) - 15
    Dim SCale_X_Faktor As Integer = PictureBox1.Width

    Dim points As PointF() = New PointF(63) {}

    TextBox1.AppendText(vbCrLf & vbCrLf)
    For j As Integer = 0 To 64
    points(j) = New PointF()
    points(j).X = x0 + j
    points(j).Y = Y0 + (sin_data(j) / 10)

    TextBox1.AppendText(CStr(points(j).Y) & vbCrLf)
    Next

    Sin_graph = PictureBox1.CreateGraphics()
    Sin_graph.Clear(Color.White)

    Using p As New Pen(Color.Black)

    p.EndCap = LineCap.ArrowAnchor

    'Draw X-Achse
    Sin_graph.DrawLine(p, x0, Y0, x0 + 400 * SCale_X_Faktor, Y0)

    'X-Achse Abschnitte 0 - 2PI
    Sin_graph.DrawLine(p, x0 + 25, Y0, x0 + 25, Y0 + 10)
    Sin_graph.DrawLine(p, x0 + 50, Y0, x0 + 50, Y0 + 10)
    Sin_graph.DrawLine(p, x0 + 75, Y0, x0 + 75, Y0 + 10)
    Sin_graph.DrawLine(p, x0 + 100, Y0, x0 + 100, Y0 + 10)
    Sin_graph.DrawLine(p, x0 + 125, Y0, x0 + 125, Y0 + 10)
    Sin_graph.DrawLine(p, x0 + 150, Y0, x0 + 150, Y0 + 10)
    Sin_graph.DrawLine(p, x0 + 175, Y0, x0 + 175, Y0 + 10)
    Sin_graph.DrawLine(p, x0 + 200, Y0, x0 + 200, Y0 + 10)

    'Draw Y-Achse
    pn.StartCap = LineCap.ArrowAnchor
    Sin_graph.DrawLine(p, x0, Y0 + Scale_y, x0, Y0 - Scale_y)
    End Using


    pn.DashStyle = DashStyle.Dash
    pn.Color = Color.Red
    pn.StartCap = LineCap.NoAnchor

    Sin_graph.DrawString("X-Achse", SystemFonts.DefaultFont, Brushes.Blue, x0, Y0)

    Sin_graph.SmoothingMode = SmoothingMode.AntiAlias

    'Zeichnen des Graphen
    Sin_graph.DrawLines(Pens.Red, points)
    End sub
    [/highlight]
    Zuletzt editiert von loro; 02.10.2009, 15:39. Reason: Code-Formatierung geändert

  • #2
    Hallo,

    Jetzt würde ich halt gerne das meine Amplitude nach Links läuft sprich alte Werte entfernt werden und neue Angehängt werden....
    Dazu kann vorzüglich eine Datenstruktur verwendet werden welche diese Aufgabe übernimmt. Beim Zeichnen werden dann alle Werte in dieser Datenstruktur dargestellt.

    Die zu verwendende Datenstruktur ähnelt einer Warteschlange (Queue) bei der beim Hinzufügen das erste Element entfernt wird wenn ein neues hinzugefügt wird.

    .net bietet keine solche Klasse aber als Ansatzpunkt kann dieses Code-Schnippsel verwendet werden:
    [highlight=vbnet]
    Public Class FixedQueue(Of T)
    * * Inherits Queue(Of T)
    * * Public Sub New(ByVal initialCollection As IEnumerable(Of T))
    * * * * MyBase.New(initialCollection)
    * * End Sub
    * *
    * * Public Sub Add(ByVal item As T)
    * * * * ' 1. Element entfernen:
    * * * * Me.Dequeue()
    * * * *
    * * * * ' Neues Element hinzufügen:
    * * * * Me.Enqueue(item)
    * * End Sub
    * *
    * * Public Sub Add(ByVal collection As ICollection(Of T))
    * * * * For Each item As T In collection
    * * * * * * Me.Add(item)
    * * * * Next
    * * End Sub
    End Class
    [/highlight]

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Das werde ich gleich mal Probieren.

      Danke schon mal gfoidl

      Comment

      Working...
      X