mit Pol-Koordinaten arbeiten

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von aligator.

    mit Pol-Koordinaten arbeiten

    hi
    wir haben heute in der schule mit polkoordinaten angefangen.

    da hab ich mir gedacht, dass ich damit ein radar aus fischertechnik bauen könnte.

    die probleme dabei:

    -wie kann ich in vb mit koordinaten arbeiten, die nicht von links nach rechts und oben nach unten gehen, sondern so wie in mathe von unten nach oben
    -kann man überhaupt in vb mit polkoordinaten arbeiten?
    :P Mfg Aligator :P
    Du kannst mit beliebigen Koordinaten arbeiten, musst Dir aber immer die entsprechende Transformation programmieren.
    kartesisch -> polar:

    VB.NET-Quellcode

    1. r = math.Sqr(x * x + y * y)
    2. phi = math.Atan2(y, x) ' Bogenmaß !!!
    3. 'grad = bogen * 180. / math.pi

    polar -> kartesisch:

    VB.NET-Quellcode

    1. x = r * math.cos(phi) ' Bogenmaß !!!
    2. y = r * math.sin(phi) ' Bogenmaß !!!
    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!
    ok. das hab ich verstanden.
    und was ist bei meiner ersten frage?

    also dass wenn ich den Punkt (0|0) hab und ihn am pc darstellen will, dann is des ja anders:

    in kartesischen koordinaten ist der punkt 0 ja in der mitte
    beim pc is des links oben

    wie kann ich kartesischen koordinaten auf PC-Koordinaten umrechnen und umgekehrt?

    oder ist es möglich einzustellen, wo beim programmieren der punkt 0 sein soll?
    :P Mfg Aligator :P
    einfach die halbe höhe und halbe breite addieren?! Das ist doch einfachste Mathematik :P
    Für ein einzelnes Control also:
    X+Controlname.Width\2
    Y+Controlname.Height\2
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @jvbsl:
    Mal aufpassen :D
    Bildschirm: y zeigt nach unten !
    Papier: y zeigt nach oben !
    Also:

    VB.NET-Quellcode

    1. MyX = x0 + x
    2. MyY = y0 - y

    x0, y0 - Lage des Koordinatenursprungs,
    x, y - Bildschirmkoordinaten
    Umkehrung:
    die Gleichungen nach x und y umstellen.
    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!
    meine Rechnung stimmt schon, danach ist alles im Mittelpunkt, wenn man nun aber definiert, dass Oben auch nach oben auf dem Bildschirm gehen soll, dann stimmt deine, deins ist sozusagen meins nur an der Y-Achse gespiegelt... :P
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Genau das wollte ich zum Ausdruck bringen. :D
    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!
    hi
    soweit geht es schon, nur mit dem Winkel phi passt es noch nicht.

    gebe ich 0 an, ist der punkt leicht über der x-Achse
    geb ich 1 an ist er schon ganz woanders. hier der code:


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    3. Radar.Refresh()
    4. End Sub
    5. 'kartesisch -> polar:
    6. 'r = math.Sqr(x * x + y * y)
    7. 'phi = math.Atan2(y, x) ' Bogenmaß !!!
    8. ' 'grad = bogen * 180. / math.pi
    9. 'polar -> kartesisch:
    10. 'x = r * math.cos(phi) ' Bogenmaß !!!
    11. 'y = r * math.sin(phi) ' Bogenmaß !!!
    12. Private Sub Radar_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Radar.Paint
    13. Dim P0 As Point
    14. Dim P As PointF
    15. 'Dim y0 As Point
    16. P0.X = CInt(Radar.Width / 2)
    17. P0.Y = CInt(Radar.Height / 2)
    18. Dim r As Single = 50
    19. Dim phi As Single = 2
    20. P.X = CSng(r * Math.Cos(phi)) ' Bogenmaß !!!
    21. P.Y = CSng(r * Math.Sin(phi)) ' Bogenmaß !!!
    22. P.X = P0.X + P.X
    23. P.Y = P0.Y - P.Y
    24. e.Graphics.DrawPie(Pens.Blue, 0, 0, Radar.Width, Radar.Height, 360, 360)
    25. e.Graphics.FillPie(Brushes.Black, P.X - 10, P.Y - 10, 10, 10, 0, 360)
    26. End Sub
    27. End Class



    Edit:
    Mir is grad noch eingefallen:
    könnte es sein dass ich phi als kommazahl angeben muss?
    also für 45° -- 0,45
    und für 100° -- 1
    :P Mfg Aligator :P

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