Du bist nicht angemeldet.

Werbeanzeige

1

19.02.2021, 09:04

Pfeil an Linienende zeichnen/berechnen

Hi,

ich brauche mal einen kleinen Denkanstoß, das Problem sollte ja eigentlich nicht kompiziert sein.

Ich habe eine Linie, an deren Ende ich gerne einen Pfeil zeichnen würde. Bei einer waagerechten Linie ist das ganz einfach, es wären zwei zusätzliche Linien die beide am Ende der ersten Linie beginnen und beide an einer in X-Richtung verschobenen und in Y-Richtung in positiver und negativer Richtung verschobenen Koordinate enden. Daraus ergibt sich dann bei vernünftiger Wahl der X-Verschiebung un der Y-Verschiebungen ein Pfeil.

Allerdings besteht die Welt jetzt nicht nur aus dem Sonderfall "waagerechte Linie", weswegen dieser Ansatz für alles andere nicht wirklich taugt.

Deswegen: wie berechne ich so eine Pfeilspitze für Beliebige, im 2D-Raum liegende Linien richtig?

Danke!

Jonathan

Community-Fossil

  • Private Nachricht senden

2

19.02.2021, 09:49

Ok, du überlegst ja scheinbar die Pfeilspitzen aus zwei Linien zu zeichnen. Dafür brauchst du 3 Koordinatenpaare (die Pfeilspitze ist ja für beide gleich). Was du dann tun solltest: Schreibe eine Funktion, die die Pfeilspitzenparameter für den waagerechten Fall berechnet (vielleicht sogar abhängig von Größe / 'Spitzigkeit'). Für den allgemeinen Fall nimmst du diese Punkte dann und rotierst sie, z.B. mit einer 2D Rotationsmatrix. Den Winkel dafür kannst du ja direkt aus der Hauptlinie extrahieren, z.B. mit atan2.
Lieber dumm fragen, als dumm bleiben!

3

19.02.2021, 09:59

OK, ich sollte vielleicht etwas genauer sein: die Linie, die den Pfeil bekommen soll, existiert bereits. Die ist also schon in irgend einem Winkel ausgerichtet und dort würde ich gerne die Pfeilspitze hinzufügen.

D.h. für den von dir beschriebenen Weg müsste ich erst die Rotation der Linie ermitteln um dann die Pfeilspitze entsprechend zu rotieren. Klingt machbar, erscheint mir aber rechenzeitaufwändig. Gibt's da eventuell auch einen schnelleren Weg?

Danke!

4

19.02.2021, 10:05

Du musst doch die Linie gar nicht mehr anfassen. Du erstellst einfach deine Pfeilspitzen in der Waagerechten-Form am Ursprung und rotierst sie. Danach verschiebst du sie auf die gewünschte Position (eben auf die End-Koordinate deiner Linie).

EDIT: Bei nochmaligem Lesen scheine ich dich missverstanden zu haben. Wenn es so ist, dann sry :D
Im Endeffekt ist das allerdings der geläufigste Weg würde ich behaupten. Für eine reine Rotation brauchst du allerdings auch nicht zwingend ne Matrix. Matrizen werden erst dann wirklich relevant, wenn du mehrere Transformationen hintereinader ausführen möchtest.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DNKpp« (19.02.2021, 10:10)


David Scherfgen

Administrator

Beiträge: 10 334

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

19.02.2021, 10:12

Man muss hier gar nicht mit Winkelberechnungen anfangen, es geht viel einfacher.

Du brauchst eigentlich nur 2 Achsen: Einmal die Achse in Pfeilrichtung, einmal eine Achse senkrecht dazu. Die Achse in Pfeilrichtung kriegst du, indem du Endpunkt minus Startpunkt der Linie berechnest und das normierst (durch die Länge dividieren). Einen dazu senkrechten Vektor kriegst du, indem du x und y der ersten Achse vertauschst und bei einem davon (egal) das Vorzeichen wechselst. Das ergibt deine zweite Achse. Jetzt kannst du die Pfeilspitze mit Hilfe dieser beiden Achsen, die dir zusammen mit der Pfeilspitze als Ursprung ein Koordinatensystem aufspannen, nach Belieben zeichnen. Das sollte dir erst einmal einen Denkanstoß geben. Wenn du mehr Details brauchst, helfe ich gerne weiter.

6

19.02.2021, 14:10

Der Trick mit dem Tauschen der Koordinaten funktioniert hervorragend - Danke!

Werbeanzeige