Dreieck zeichnen und beschriften

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Zyran.

    Dreieck zeichnen und beschriften

    Hallo zusammen,

    ich habe die gleiche Aufgabe. Allerdings habe ich sie etwas anders geschrieben.

    VB.NET-Quellcode

    1. Public Class frmDreieck
    2. Private Sub frmDreieck_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
    3. Dim g As Graphics = CreateGraphics()
    4. g.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
    5. Dim ptA As New PointF(CSng(ClientSize.Width / 2), _
    6. CSng(ClientSize.Height / 2))
    7. Static ptB As New PointF(e.X, e.Y) 'vorherige Mausposition
    8. Dim fn = New Font("Arial", 14)
    9. Dim pp = New Pen(BackColor) 'Löschen mit Backcolor
    10. Dim bb = New SolidBrush(BackColor) 'Löschen mit Backcolor
    11. Dim szVersatz As New Size(-20, -15) 'wo soll die Beschriftung angezeigt werden?
    12. g.DrawLine(pp, ptA, ptB)
    13. g.DrawLine(pp, ptB, New PointF(ptA.X, ptB.Y))
    14. g.DrawLine(pp, ptB, New PointF(ptB.X, ptA.Y))
    15. g.DrawLine(pp, ptA, New PointF(ptB.X, ptA.Y))
    16. g.DrawString("A", fn, bb, PointF.Add(ptA, szVersatz))
    17. g.DrawString("B", fn, bb, PointF.Add(ptB, szVersatz))
    18. g.DrawString("C", fn, bb, New PointF(ptB.X - 15, ptA.Y))
    19. g.DrawString("a", fn, bb, MitteDerSeite(ptB, New Point(ptB.X, ptA.Y)))
    20. g.DrawString("b", fn, bb, MitteDerSeite(ptA, New Point(ptB.X, ptA.Y)))
    21. g.DrawString("c", fn, bb, PointF.Add(MitteDerSeite(ptA, ptB), New Size(-15, -15)))
    22. 'Sichtbar zeichnen mit aktueller Mausposition
    23. ptB = New PointF(e.X, e.Y) 'aktuelle Mausposition zuweisen
    24. pp.Color = Color.Red
    25. '--- Dreieck wird gezeichnet
    26. g.DrawLine(pp, ptA, ptB) 'Hypothenuse
    27. g.DrawLine(pp, ptA, New PointF(ptB.X, ptA.Y)) 'Ankathete
    28. g.DrawLine(pp, ptB, New PointF(ptB.X, ptA.Y)) 'Gegenkathete
    29. '--- Dreieck wurde gezeichnet
    30. 'Dreieck wird beschriftet
    31. bb.Color = Color.Green 'sichtbare Schriftfarbe
    32. Dim ptC = New PointF(ptB.X, ptA.Y)
    33. g.DrawString("A", fn, bb, PointF.Add(ptA, szVersatz))
    34. g.DrawString("B", fn, bb, PointF.Add(ptB, szVersatz))
    35. g.DrawString("C", fn, bb, New PointF(ptB.X - 15, ptA.Y))
    36. g.DrawString("a", fn, bb, MitteDerSeite(ptB, ptC))
    37. g.DrawString("b", fn, bb, MitteDerSeite(ptA, ptC))
    38. g.DrawString("c", fn, bb, PointF.Add(MitteDerSeite(ptA, ptB), New Size(-15, -15)))
    39. End Sub
    40. Private Shared Function MitteDerSeite(ByVal a As PointF, ByVal b As PointF) As PointF
    41. Return New PointF(CSng((a.X + b.X) * 0.5), CSng((a.Y + b.Y) * 0.5))
    42. End Function
    43. End Class


    Leider habe ich bei der Ankathete (b) das Problem, dass der Buchstabe noch Streifen mit sich zieht. Siehe folgendes Bild:



    Kann mir jemand sagen, was ich falsch mache?

    Gruß Zyran

    Neue Frage, neues Thema. Verschoben. ~fufu

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „fufu“ ()

    Willkommen im Forum.
    Uralt-Thread wiedereröffnet. Inzwischen gibt es doch einen fetten Hinweistext, dass man doch bitte einen neuen Thread eröffnen soll, wenn man ein eigenes Problem hat.
    R.I.P., Uralt-Thread ||

    Ich hab das Problem mit Deinem Code nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Ich hab das Problem mit Deinem Code nicht.
    Machst Du Strict Off?
    @Zyran Willkommen im Forum.
    Um künftige Fehler zu vermeiden, empfehlen wir dringendst Option Strict On :!: Gugst Du hier: Visual Studio - Empfohlene Einstellungen
    Ändere alle PointF in Point, lösche CSng und verwende Integer-Division:

    VB.NET-Quellcode

    1. Dim ptA As New Point(ClientSize.Width \ 2, ClientSize.Height \ 2)

    Ansonsten funktioniert alles prima, wie VaporiZed bereits schrieb.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!