2D Spiel - Gerade auf Linie zeichnen

F

funcoder

Fortgeschrittenes Mitglied
39
Hallo Community,

ich hänge gerade verzweifelt an einem normalerweise simplen Problem.

Und zwar zeichne ich via Canvas eine Linie. Gegeben sind logischerweise die Start X,Y Koordinaten sowie die End-Koordinante X,Y.

Das Problem ist ich möchte jetz ein 90° Grad Winkel ausgehend der End Koordinaten zeichnen. Sodass ich eine rechtwinklige Linie auf der bestehende Linie habe. Bzw. dessen X,Y Koordinaten errechne.

Ich denke das man den Satz des Pythagoras braucht aber ich habe auch gar kein Plan wie ich das dann in die entsprechenden X,Y Koordinante umrechnen soll.

Hat hier jemand vielleicht für mich ein kleines Beispiel?

Danke im Voraus

C0DER

P.S. Mathe ist, wie man sieht einfach nicht meine Stärke:o
 
Evtl. hilft Dir der Suchbegriff "Polarpunktberechnung" weiter. Dort dürftest Du auf Formeln aus der Vermessungstechnik stoßen. Vielleicht kannst Du damit etwas anfangen.
 
Gibts es noch eine Bedingung für die Länge der neuen Linie oder so?
ansonsten kannst du die Endkoordinaten minus die Anfagskoordinaten rechnen, wenn du das dann tauschst und wieder auf die Endkoordinaten draufrechnest, hast du die Enkoordinaten der 90-Grad-Linie.
Beispiel:
Alte Linie geht von (15/10) nach (40/50). Minus rechnen: 40-15=25,50-10=40
tauschen und dazurechnen:
Endkoordinaten neue Linie:(80/75)
Wenn die Linie eine bestimmte Länge haben soll brauchst den Pytagoras:
Das Verhältnis von x und y bleibt wie oben, 40/25
Pytagoras wäre l²=x²+y²
da y=x*25/40 sein soll gilt
l²=(x²+(x*25/40)²)
umstellen nach x:
l²=x²+x²*25²/40²
l²=(1+25²/40²)x²
x=sqrt(l²/(1+25²/40²))
und dann wieder y=x*25/40
schon fertich ;)
da die 25 oben für den x-Unterschied stand und 40 für den y-Unterschied wäre die ganze Formel
x3=sqrt(l²/(1+(x2-x1)²/(y2-y1)²))+x2
y3=sqrt(l²/(1+(x2-x1)²/(y2-y1)²))*(x2-x1)²/(y2-y1)²)+y2
sqrt(l²/(1+(x2-x1)²/(y2-y1)²)) kann man natürlich vorher als Variable speichern,
hoffe mal das passt so und man kann was mit anfangen ;)
allerdings müsste man noch ne Fallunterscheidung einbauen, weil mit dieser Methode immer in die Plusrichtung gezeichnet wird. Was passiert wenn der vorherige Strich in beide Koordinaten in Richtung Minus ging, kann ich nicht sagen.
Ich mach mir morgen vielleicht nochmal Gedanken, Freundin quängelt ;)
Gruß Felix
 
Wow... super vielen Dank FelixL für deine umfangreiche Antwort.

Die Formel wird verwendet und funktioniert auch alles.
Allerdings habe ich noch ein Problem.

Momentan errechne ich quasi ja immer von jedem Koordinatenpunkt einen 45 Grad Winkel,sodass ich ja dadurch einen "richtiges" Dreieck erhalten würde.

Was ich da jetzt noch bräuchte wäre eine Formel damit ich ausgehend vom Endpunkt den 90 Grad Winkel errechnen kann. bzw. dessen Koordinaten. Wobei die Länge der neuen Linie variable sein sollte.

Ich hab jetzt hierzu mal eine Bilddatei im Anhang die das Problem hoffentlich besser veranschaulicht.

Vielen Dank

MfG

C0DER
 

Anhänge

  • bild.jpg
    bild.jpg
    21 KB · Aufrufe: 726
Bin gerade etwas verwirrt, das da oben müsste einen 90-Grad-Winkel machen...hast du nur die einfache Formel ohne Länge getestet? (Das kleine l steht übrigens weiter unten für die gewünschte Länge ;))
Wenn die obere Formel nen 45-Grad Winkel macht, hast du vielleicht Anfangs- und Endpunkt der alten Linie getauscht bzw. die neue Linie vom Anfangspunkt der alten aus gezeichnet? Sollte vom Endpunkt aus gezeichnet werden, dann müsste es gehen ;)
 
FelixL schrieb:
Bin gerade etwas verwirrt, das da oben müsste einen 90-Grad-Winkel machen...hast du nur die einfache Formel ohne Länge getestet? (Das kleine l steht übrigens weiter unten für die gewünschte Länge ;))
Wenn die obere Formel nen 45-Grad Winkel macht, hast du vielleicht Anfangs- und Endpunkt der alten Linie getauscht bzw. die neue Linie vom Anfangspunkt der alten aus gezeichnet? Sollte vom Endpunkt aus gezeichnet werden, dann müsste es gehen ;)


Das Problem bei deiner Methode (worüber ich beim Nachdenken auch gestolpert bin) es funktioniert nicht einwandfrei für alle Fälle. (Je nachdem ob die Gerade jetzt von a nach b oder von c nach a geht ;) = Vorzeichenprobleme)
 
ahh ok Danke. Ich hatte tatsächlich die Variable l vergessen.
Also wenn ich die Variable l auf 0 lasse dann krieg ich den 45 Grad winkel. okay.
Mein Problem ist noch der wie ich auf den Wert l komme. ich dachte eventuell dass l für x3 die summe aus x2 und x1 ist aber irgendwie funktioniert das nicht immer.
Hier mal mein Code den ich testweise in VB geschrieben habe.
PHP:
x1 = 150
y1 = 100

x2 = 400
y2 = 500

x3 = Sqr((100 ^ 2 / (1 + (x2 - x1) ^ 2 / (y2 - y1) ^ 2)) + x2)
y3 = Sqr((100 ^ 2 / (1 + (x2 - x1) ^ 2 / (y2 - y1) ^ 2)) * (x2 - x1) ^ 2 / (y2 - y1) ^ 2) + y2

Picture1.Line (x2, y2)-(x1, y1)// Zeichnet Linie von x2,y2 nach x1,y1
Picture1.Line (x3, y3)-(x2, y2)// Zeichnet Linie von x3,y3 nach x2,y2
Was dabei rauskommt habe ich im Anhang angefügt. Mit länge 100 (x also auch y)...

DANKE

C0DER
 

Anhänge

  • img.png
    img.png
    214 Bytes · Aufrufe: 1.338
Zuletzt bearbeitet:

Ähnliche Themen

D
Antworten
3
Aufrufe
453
jogimuc
J
E
Antworten
0
Aufrufe
955
ey6799
E
CrazyC
Antworten
0
Aufrufe
728
CrazyC
CrazyC
Zurück
Oben Unten