Ich habe eine nicht geradlinige Linie, die durch eine Reihe von x- und y-Koordinatenpunkten definiert ist. Ich könnte ohne Probleme eine gerade Linie direkt zwischen diesen Punkten auf dem Bildschirm zeichnen. Leider muss ich die Linie in gleich langen Segmenten zeichnen.
Hier ist ein Beispiel dafür, wie ich eine nicht gerade Linie mit 3 Punkten in eine Reihe von mehreren äquidistanten Punkten aufteilen muss. (Ignorieren Sie den letzten roten Punkt, er ist das Ergebnis, wenn eine Linie nicht gleichmäßig geteilt wird, und ist auch der Endpunkt)
Bitte beachten Sie die rote Linie am "Gelenk". Nehmen wir an, dass ich eine Linie A->B->C habe, bei der die Vektoren AB und BC einen Winkel bilden. Im Grunde knickt die Linie im Punkt B ab.
Das Segmentieren einer Linie zwischen Punkt A und B ist bis zu einem gewissen Punkt kein Problem. Aber wenn AB nicht gleichmäßig durch die Segmentlänge geteilt wird, muss ich etwas Besonderes tun. Ich muss die verbleibende Länge als eine Seite eines Dreiecks betrachten. Die konstante Segmentlänge ist eine weitere Seite eines Dreiecks, die sich mit dem BC-Segment verbindet (die rote Linie oben). Ich muss die Länge vom Punkt B bis zu diesem Schnittpunkt kennen. Mit dieser Information kann ich die Berechnung der Liniensegmente auf BC fortsetzen.
Hier ist das Dreieck, das ich zu lösen versuche (im Folgenden bezeichne ich die Variablen so, wie sie auf diesem Bild erscheinen) Bis jetzt habe ich das Problem auf die Anwendung des Kosinusgesetzes heruntergebrochen. c 2 \= a 2 + b 2 - 2ab * Cos( y )
Das Problem ist, dass ich c bereits kenne, es ist die Segmentlänge. Ich muss für a lösen (ich kann y berechnen).
Ich bin schon so weit gekommen, eine Polynomgleichung zu schreiben, aber jetzt komme ich nicht weiter: a 2 + b 2 - 2ab * Cos( y ) - c 2 \= 0
oder Ax 2 + Bx + C (A = 1, B = -2b * Cos( y ), C = b 2 - c 2 , x = a)
Ist das überhaupt der richtige Ansatz? Was soll ich als nächstes tun? Ich muss dies in Actionscript implementieren.
EDIT: Ach was, ich müsste die quadratische Formel verwenden. Also bekomme ich jetzt:
a = b * Cos( y ) +/- SqrRoot(c 2 - b 2 * Sin( y ) 2 )
Wie setzt man das nun in Code um...
0 Stimmen
Wenn Sie die Url zu dem Bild hinzufügen, kann ich es in Ihrem Beitrag bearbeiten.
0 Stimmen
Ich habe deine Frage hochgestuft, du hast jetzt 13 Vertreter, also kannst du das Bild posten.
0 Stimmen
Ich danke Ihnen! Ich weiß das wirklich zu schätzen. Ich glaube, ich habe die mathematische Lösung gefunden (über die quadratische Formel). Jetzt muss ich sie nur noch codieren. In der Zwischenzeit musste ich mich mit einem anderen Problem befassen, aber wenn ich die Möglichkeit habe, es zu kodieren, werde ich versuchen, zurückzukommen und eine Antwort zu posten. In der Zwischenzeit würde ich mich über jeden Vorschlag freuen. Zwei Gleichungen zu lösen und dann zu prüfen, welche davon positiv ist, scheint ziemlich aufwendig zu sein. Aber es sollte nur an den Verbindungsstellen notwendig sein, so dass die Auslosungslogik die Dinge hoffentlich nicht zu sehr verlangsamen wird.
0 Stimmen
Möchten Sie eine Polylinie oder eine Kurve durch Kontrollpunkte zeichnen? Bei Polylinien sind gleiche Längen auf allen Segmenten unmöglich, ohne Ecken zu schneiden (im allgemeinen Fall).
0 Stimmen
Entschuldigung, entweder bin ich verwirrt oder ich habe Sie verwirrt. Ich werde gerade Liniensegmente und keine Kurven zeichnen, daher weiß ich nicht, wozu Kontrollpunkte gut sein sollen. Ich denke, die Antwort auf Ihre Frage ist, dass ich die Ecke abschneiden werde, indem ich eine Linie von 1 Segmentlänge in der Nähe der Stelle einfüge, an der sich die beiden Linien AB und BC sonst verbinden würden, berechnet mit der obigen Mathematik. Der Grund dafür, dass ich darauf bestehe, dass die Segmente gleich lang sind, liegt darin, dass sie eine Dekoration mit einer bestimmten Größe haben werden. Zum Beispiel wird ein Segment einer Kaltfrontlinie ein Dreieck haben (wie in den Nachrichten).