Hallo,
Das ist meine Formel:
let det = (mX-qX)*(pY-qY)-(mY-qY)*(pX-qX);
Die Formel ist korrekt und Du solltest hier unterschiedliche Vorzeichen bekommen, wenn P einmal links und einmal rechts der Geraden liegt.
Ist der Punkt rechts dann ist Ergebnis +, wenn links dann -
Es ist umgekehrt. Nimmst Du den Vektor QM=M−Q als Bezugrichtung, so stehen dessen Koordinaten in der ersten Spalte der 2x2-Matrix, von der die Determinante berechnent wird. Dann gilt: (M−Q)×(P−Q)=∣∣∣∣∣mx−qxmy−qypy−qypy−qy∣∣∣∣∣={>0,p links<0,p rechtsDas 'links' und 'rechts' bezieht sich auf die Richtung von QM=M−Q. So als ob man sich auf den Punkt Q stellt und nach M blickt. Hier mal ein Beispiel:
M=(22),Q=(7−1),M−Q=(mx−qxmy−qy)=(−53)P=(36)⟹P−Q=(px−qxpy−qy)=(−47)(mx−qx)⋅(py−qy)−(my−qy)⋅(px−qx)=−5⋅7−3⋅(−4)=−35+12=−23<0rechne es ruhig mal für die anderen beiden Punkte in der Skizze nach:P(−2,3)→(M−Q)×(P(−2,3)−Q)=7>0→linksP(11,−3)→(M−Q)×(P(11,−3)−Q)=−2<0→rechtsSolltest Du immer das gleiche Vorzeichen bekommen, liegt Dein Problem außerhalb dieser Code-Zeile.
Wenn Du den Winkel ∠QMP berechnen möchtest, sieht die Sache leicht anders aus. Um einen Winkel zu bestimmen, betrachtet man die beiden Vektoren, die vom Scheitel des Winkels ausgehen:
Im Falle des Winkels ∠QMP (blau) ist der Scheitel M und die beiden Vektoren sind MQ=Q−M (die Bezugsrichtung; rot) und PM (der 'freie' Schenkel; blau). In der Skizze oben istMQ=(5−3),MP=(14)Weiter ist dannMQ×MP=∣∣∣∣∣5−314∣∣∣∣∣=23MQ⋅MP=(qx−mx)(px−mx)+(qy−my)(py−my)=5⋅1+(−3)⋅4=−7Die zweite Zeile ist das Skalarprodukt der Vektoren. Die meisten Programmiersprachen verfügen über eine Funktion arctan2, die aus diesen beiden Werten den Winkel zwischen den Vektoren berechnent. In Javascript ist das Math.atan2(y,x):Math.atan2(23,−7)≈1,866≡106,9°Das Ergebnis ist ein Wert im Bogenmaß (rad) zwischen −π und π. Der Wert ist wieder positiv, wenn P auf der linken Seite von MQ liegt. Da sich hier aber zu dem Bild vorher die Blickrichtung geändert hat, haben sich auch die Seiten links und rechts vertauscht. Achte bei atan2 darauf, wo Du welchen Wert einträgst. Bei Javascript kommt zuerst der Wert aus der 'Determinante' (nennt sich dort y-Wert). Excel kennt die Funktion auch, nur dort sind die Parameter vertauscht.
... und wie immer gilt: falls noch was unklar ist, bitte melden.