GDI+ Linie soll in richtig von Maus zeigen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    GDI+ Linie soll in richtig von Maus zeigen

    Hey Leute!

    Ich habe eine echt super Idee für ein Spiel, dabei habe ich allerdings ein Problem:

    Ich versuche eine Linie so zu zeichnen, dass sie immer:
    1. Die gleiche Länge hat
    2. In die Richtung der Maus zeigt

    Im Anhang findet ihr noch eine Abbildung!

    Danke!

    //EDIT: Im Bild nicht "Richtig" sonder "Richtung"
    Bilder
    • MausGDI.png

      4 kB, 269×259, 154 mal angesehen
    Was soll dieses "Danke!"? Ich finde weder eine Frage, noch einen Lösungsansatz. Sollen wir jetzt deine Arbeit machen?

    P.S.: Ein kleiner Tipp: Du hast also die Länge der Hypotenuse. Den Winkel bekommst du aus den Koordinaten auch raus

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    sieh dir mal die winkelfunktionen an^^

    LocX = MausX + länge * cos(winkel)
    LocY = mausY + länge * sin(winkel)

    den winkel bekommst du indem du den unterschied von Mausposition und Linienurpsrung berechnest:
    DX = mausX -UrsprungX
    DY = mausY - UrsprungY

    winkel = math.atan2(dy,dx)
    Okay ich kann den Winkel jetzt berechnen, aber wie setzte ich dann die Linie??

    Hier der Code

    Dim a As Double = e.X - 225
    Dim b As Double = e.Y - 225
    Dim c As Double
    Dim alpha As Double

    c = Math.Sqrt(a ^ 2 + b ^ 2)

    alpha = Math.Asin(a / c) * 180 / Math.PI
    Hi
    Vektorrechnung:

    VB.NET-Quellcode

    1. direction = New Vector2(mousePosition.X - center.X, mousePosition.Y - center.Y)

    Als Vektor kannst du entweder eine eigene Struktur schreiben, PointF verwenden oder einfach die x- und y-Komponente aufspalten. Damit der Vektor dann immer die gleiche Länge hat teilst du einfach durch seine Länge und multiplizierst die Länge drauf:

    VB.NET-Quellcode

    1. Dim length As Single = Csng(Math.Sqrt(direction.X * direction.X + direction.Y * direction.Y))
    2. Dim normalized As New Vector2(direction.X/ length * factor, directiony / length * factor)


    Gruß
    ~blaze~