Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

02.02.2013, 11:38

Ungefähre Richtung eines Punktes ermitteln

Hallo Community,

mal eine eher Mathematische Frage:

Ich habe zwei Punkte P1(x1|y1) und P2 (x2|y2), siehe Grafik. Gibt es eine Möglichkeit, ausgehend von einem Punkt die ungefähre Richtung eines anderen Punktes zu ermitteln?



Danke schon mal für die Hilfe.

Gruß,
MitgliedXYZ

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

02.02.2013, 11:42

Berechne dir den Winkel der beiden Vektoren.

(Skalarprodukt(P1, P2)) / (Länge(P1) * Länge(P2)) müsste es sein.
Stichworte: Skalarprodukt, Länge von Vektoren, Winkel zwischen Vektoren. Will ja nicht alles vorkauen. ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

FSA

Community-Fossil

  • Private Nachricht senden

3

02.02.2013, 11:54

Zitat

[...]ausgehend von einem Punkt die ungefähre Richtung eines anderen Punktes zu ermitteln?


Irgendwie habe ich das nicht ganz verstanden. ?(
Wie kann ein Punkt bei dir eine Richtung haben?

Ich würde wohl ganz primitiv Normalize(P2-P1) machen. Oder habe ich die Frage falsch verstanden?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (02.02.2013, 12:22)


4

02.02.2013, 12:07

@FSA: Er will den Winkel haben, zwischen dem Vektor und einer parallel Gerade. Die Gerade soll parallel zur x-Achse verlaufen und dabei einen Punkt schneiden.

Ich würde das mit atan2 machen.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

5

02.02.2013, 12:10

@FSA
Ich hab mich wahrscheinlich falsch ausgedrückt.
Ich möchte wissen, in welcher Richtung (von P1 ausgehend) der Punkt P2 liegt.
Die Punkte selbst haben natürlich keine Richtung.

Was meinst du mit "Länge(P1-P2)"? Die Entfernung ist kein Problem, ich hab ja die Formel Quadratwurzel((x1 - x2)²+(y1 - y2)²), aber die Entfernung brauche ich nicht, nur die Richtung...

@Architekt
So weit fortgeschritten sind meine Mathematischen Fähigkeiten leider noch nicht... Außerdem glaube ich nicht das mir Vektoren weiter helfen...

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

6

02.02.2013, 12:10

Berechne dir den Winkel der beiden Vektoren.

(Skalarprodukt(P1, P2)) / (Länge(P1) * Länge(P2)) müsste es sein.
Stichworte: Skalarprodukt, Länge von Vektoren, Winkel zwischen Vektoren. Will ja nicht alles vorkauen. ;)


arccos (Skalarprodukt(P1, P2)) / (Länge(P1) * Länge(P2))

(Wieso funktioniert der LaTeX-Code \arccos \frac{\vec{p1}\cdot \vec{p2}}{\left | \vec{p1} \right | \cdot \left | \vec{p2} \right |} nicht QQ

Um genau zu sein.

EDIT:

Ach so, ohne Vektoren. Da du nur die ungefähre Richtung willst, kannst du auch einfach die x und y Koordinaten der Punkte vergleichen, und je nach Ergebnis die Richtung angeben.

p1 (x1|y1)
p2 (x2|y2)

x1=x2, y1 > y2 ->p2 über p1
x1=x2, y1 < y2 ->p2 unter p1
x1<x2, y1 = y2 ->p2 rechts von p1
x1>x2, y1 = y2 ->p2 links von p1

Den Rest dürftest du selbst schaffen
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

FSA

Community-Fossil

  • Private Nachricht senden

7

02.02.2013, 12:20

@MitgliedXYZ Ach so du brauchst die Richtung in einem Winkel. Mit meiner Rechnung bekommst du die Richtung als Einheitsvektor.
BTW: Vektoren helfen dir gewaltig weiter.

Skalarprodukt ist nicht allzu schwer: P1.x*P2.x + P1.y*P2.y
Länge eines Vektors: sqrtf( P.x * P.x + P.y * P.y )

Das sollte dir eigentlich reichen.

EDIT: Ich muss mich korrigieren. Ihc meine nicht Länge(P2-P1) sonder Normalize(P2-P1)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

8

02.02.2013, 12:37

Danke schon mal für die vielen Antworten.

Mit Vektoren hatte ich mich noch nicht beschäftigt...

Danke Nimelrian für die If-Bedingungen (wären eh mein Plan B gewesen), hätte ich zwar auch selbst zusammengebracht, aber da sie schon dastehen, ...
Wobei, das sind ja eigentlich nur Sonderfälle. Wenn X1=X2, oder Y1=Y2 nicht der Fall ist, würden mir die vier Abfragen ja keine Richtung liefern.


Ich werde es wohl so machen:

x1=x2, y1 > y2 ->p2 über p1
x1=x2, y1 < y2 ->p2 unter p1
x1<x2, y1 = y2 ->p2 rechts von p1
x1>x2, y1 = y2 ->p2 links von p1



x1<x2, y1 > y2 ->p2 rechts oberhalb von p1
x1<x2, y1 < y2 ->p2 rechts unterhalb p1
x1<x2, y1 < y2 ->p2 rechts unterhalb p1
x1>x2, y1 < y2 ->p2 links unterhalb p1



x1>x2, y1 > y2 ->p2 links unterhalb von p1
x1>x2, y1 < y2 ->p2 links oberhalb p1
x1<x2, y1 > y2 ->p2 rechts unterhalb von p1
x1>x2, y1 > y2 ->p2 links unterhalb von p1


Von der Genauigkeit der Richtung würde es mir langen, ich brauch gar keinen Exakten Winkel.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

02.02.2013, 12:38

Ein Vektor ist nichts anders als zwei Koordinaten.

C-/C++-Quelltext

1
2
3
4
struct Vector2d {
public:
    float x, y;
}


Also wird es dich nicht umbringen.
Außerdem: wieso kaut hier wieder jeder was vor? Zwei Minuten googlen und das Problem wäre gegessen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

FSA

Community-Fossil

  • Private Nachricht senden

10

02.02.2013, 12:39

Er sagte doch er hat sich mit dieser Mathematik noch nicht beschäftigt. Also bevor dann tausend Rückfragen kommen kann man es ihm doch gleich sagen ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige