Analoges VU-Meter

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Jogl.

    Analoges VU-Meter

    hi,

    ich hab mir vor längerer zeit ein VU-Meter programmiert, was den Pegel auf einer ProgressBar anzeigt.
    Nun habe ich mir gedacht, dass ich ein analoges VU dazumache. aber ich habe leider keine ahnung wie ich eine "Nadel" ,die von einem bestimmten Punkt ausgeht und je nach pegel ausschlägt, programmiere.

    Hier noch das VU Meter wo die Nadel rein soll:



    Bitte um Hilfe!
    am besten du zeichnest per GDI eine Linie von dem punkt des Nadelbeginns zu dem Punkt, der oben auf der bar liegt. Da das Teil Rund ist aber gleichmäzig, könntest du eine Array, mit den Punkten füllen, die gebraucht werden, je nachdem wie der ausschlag ist!
    Sinus und Cosinus ist da das richtige (hat ein anderer schon erwähnt), jedoch ist die Beschreibung von der Wikipedia nicht die verständlichste, kA wann (welche Klasse) man das in der Schule macht...

    Jedenfalls ists so, dass man mit Strichlänge * Cos(Winkel) den x-Anteil rausbekommt und mit Strichlänge Sin(Winkel) den y-Anteil. Wenn du das so machst, geht wer Winkel von -90° bis +90° (musst also umrechnen) oder du nimmst als x-Anteil Strichlänge * -Cos(Winkel) und für den y-Anteil Strichlänge * Sin(Winkel), müsst auch gehen.
    Evntl. musst du noch den Winkel von Grad in Rad umrechnen, guck mal in die MSDN, was Math.Cos und Math.Sin annimmt.
    Die Strichlänge ist der Abstand zwischen den beiden Nadelenden. Wenn du den Endpunkt mit Sinus und Cosinus ermittelt hast, kannst du die 2 Enden mit einer Linie verbinden.
    so, ich hab jetzt gemacht:

    VB.NET-Quellcode

    1. VU.DrawLine(Pens.Black, x1, y1, länge * Cos(CDbl(Left)), länge * Sin(CDbl(Right)))


    doch jetzt kommt ein Haufen Fehler:

    Fehler bei der Überladungsauflösung, da keine zugreifbare "DrawLine" ohne einschränkende Konvertierung aufgerufen werden kann:
    'Public Sub DrawLine(pen As System.Drawing.Pen, x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer)': Der mit dem Argument übereinstimmende Parameter "x2" wird von "Double" auf "Integer" reduziert.
    'Public Sub DrawLine(pen As System.Drawing.Pen, x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer)': Der mit dem Argument übereinstimmende Parameter "y2" wird von "Double" auf "Integer" reduziert.
    'Public Sub DrawLine(pen As System.Drawing.Pen, x1 As Single, y1 As Single, x2 As Single, y2 As Single)': Der mit dem Argument übereinstimmende Parameter "x2" wird von "Double" auf "Single" reduziert.
    'Public Sub DrawLine(pen As System.Drawing.Pen, x1 As Single, y1 As Single, x2 As Single, y2 As Single)': Der mit dem Argument übereinstimmende Parameter "y2" wird von "Double" auf "Single" reduziert.
    Versuchs mal so:

    VB.NET-Quellcode

    1. VU.DrawLine(Pens.Black, cSng(x1), cSng(y1), cSng(länge * Cos(CDbl(Left))), cSng(länge * Sin(CDbl(Right))))


    Abwer kannst du mir sagen, wie du von "Winkel" auf "Left" und "Right" kommst?! Das sollte übrigens auch bei Sin und Cos der gleiche Winkel sein!