Punkt auf Diagonale in Hexagon finden

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    Punkt auf Diagonale in Hexagon finden

    Hallo Community,
    ich bastle im Moment an etwas, und bin dabei auf ein Problem gestoßen. Eigentlich sollte das Ganze nichts Großes sein, es handelt sich dabei um ein mathematisches Problem, bei dem ich einfach nicht durchblicke.
    Zu Beginn, folgende Grafik:

    Alle Punkte sind bekannt, die länge der halben Diagonale errechne ich mir auch.
    Nehmen wir nun an, dass die Strecke S 100% ist. Wie kann ich mir den Punkt auf der Diagonale errechnen, bei dem die Strecke z.b. 25% ist?

    Danke im Vorraus.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Ich würde einfach den Verbindungsvektor von 1 zu M aufstellen (oder andersrum, je nachdem) und dann kannste den Vektor einfach mit dem Skalar 0,25 multiplizieren und zum Ortsvektor des Urpsrungspunkts (im einfachsten Fall der Nullvektor, wenn der Punkt der Ursprung sein sollte) addieren. Was Du suchst, löst man auch mit Vector(2).Lerp, wenn's programmiertechnisch sein soll, um zwischen den zwei Punkten linear zu interpolieren. Solltest Du geschickt einen der Punkte entsprechend als Ursprung wählen, haste gleich den Ortsvektor des Zielpunkts und kannst die Koordinaten übernehmen.
    Wenn wirklich das Ganze Hexagon gegeben ist (also dessen 6 Punkte), könnte man zuerst mit einem Polygon ansetzen, dessen Mittelpunkt bestimmen und dann entsprechend, wie oben beschrieben, fortfahren. Allerdings scheinst Du ja, wie Du gesagt hast, die Koordinaten der Punkte alle zu kennen, folglich kann man auch direkt nur mit den beiden arbeiten.

    Sowas habe ich programmiertechnisch umgesetzt, falls es Dich interessiert:
    github.com/ProgTrade/SharpMath…h/Geometry/Vector.cs#L220
    github.com/ProgTrade/SharpMath…h/Geometry/Polygon.cs#L38
    github.com/ProgTrade/SharpMath…/Geometry/Polygon.cs#L113

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()

    Danke vorerst, natürlich muss es programmiertechnisch umsetzbar sein.
    Ich bastle an nem Control. Die Sache ist hald die, ich habe in .NET noch nie mit Vektoren gearbeitet..
    Werd mir das mal ansehen.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    An sich ist ein Vektor nur eine Struktur, die entsprechend die Koordinaten beinhaltet. Dasselbe macht ein Point ja auch, es ist aber mathematisch gesehen nicht das gleiche, da ein Punkt ja fest im Raum liegt und ein Vektor nicht. Zudem gibt ein Vektor eine entsprechende Richtung und Länge an.
    Man könnte das natürlich auch mit den Points anhand ihrer Koordinaten machen und die Rechnungen durchführen. Deren Resultate beschreiben dann im Endeffekt den Vektor, aber Du behandelst ihn halt nicht als solchen.
    Das geht also mit den Punkten genauso, ist zwar mathematisch gesehen nicht 100% korrekt, aber für die Zwecke ging das auch. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    Also soll ich mir einfach den Richtungsvektor M-1 Ausrechnen und den dann 0.25 multiplizieren?

    VB.NET-Quellcode

    1. Private Function GetPointOnLine(p1 As Point, p2 As Point, perc As Integer) As Point
    2. Dim x As Single = (p2.X - p1.X) * (perc / 100)
    3. Dim y As Single = (p2.Y - p1.Y) * (perc / 100)
    4. Return New Point(x, y)
    5. End Function

    Wobei p1 der Mittelpunkt und p2 in diesem Fall Punkt 1 ist?
    Edit:// nope nach nochmal nachdenken bin ich darauf gekommen, dass das so nicht funktionieren kann ^^
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Genau. Vergiss aber nicht die resultierenden Koordinaten noch zu den Koordinaten des Anfangspunkts (p1) zu addieren (außer, der ist der Ursprung). Sonst landest Du woanders.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Funktioniert perfekt, danke!

    VB.NET-Quellcode

    1. Private Function GetPointOnLine(p1 As Point, p2 As Point, perc As Integer) As Point
    2. Dim x As Single = ((p2.X - p1.X) * (perc / 100)) + p1.X
    3. Dim y As Single = ((p2.Y - p1.Y) * (perc / 100)) + p1.Y
    4. Return New Point(x, y)
    5. End Function
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!