Punkt auf Linie

S

Schuriko

Bekanntes Mitglied
Ich suche gerade eine effiziente Methode, wie man herausbekommt, ob P3(x,y) auf der einer Linie liegt die sich von P1(x,y) zu P2(x,y) erstreckt.
Kann mir hier einer weiterhelfen?
 
krgewb

krgewb

Top Contributor
Mathemtisch gesehen?

Ich denke, dass es nicht trivial wird wegen der Ungenauigkeit bei float.
 
T

TM69

Bekanntes Mitglied
Dieses lässt sich ganz einfach durch die Formel:

sqrt((p1.x - p3.x)^2 + (p1.y - p3.y)^2) + sqrt((p2.x - p3.x)^2 + (p2.y - p3.y)^2) = sqrt((p1.x - p2.x)^2 + (p1.y - p2.y)^2)

berechnen. Wobei P1 und P2 der Start / Endpunkt ist und P3 der gesuchte Punkt.
 
H

httpdigest

Top Contributor
Wenn du Fließkommaarithmetik verwendest und die Linie nicht exakt entlang einer der beiden Hauptaxen verläuft, wird der Punkt P3 niemals _exakt_ auf der Linie sein. Du kannst hier nur mit einem maximalen Margin/Epsilon rechnen. Und dann einfach lineare Algebra anwenden:
Java:
float dy = p2y - p1y, dx = p2x - p1x;
float d = Math.abs(dy*p3x - dx*p3y + p2x*p1y - p2y*p1x) / (dy*dy + dx*dx);
boolean punktAufLinie = d < 1E-3f; // <- beliebiges Epsilon
 
S

Schuriko

Bekanntes Mitglied
Wenn du Fließkommaarithmetik verwendest und die Linie nicht exakt entlang einer der beiden Hauptaxen verläuft, wird der Punkt P3 niemals _exakt_ auf der Linie sein. Du kannst hier nur mit einem maximalen Margin/Epsilon rechnen. Und dann einfach lineare Algebra anwenden:
Java:
float dy = p2y - p1y, dx = p2x - p1x;
float d = Math.abs(dy*p3x - dx*p3y + p2x*p1y - p2y*p1x) / (dy*dy + dx*dx);
boolean punktAufLinie = d < 1E-3f; // <- beliebiges Epsilon
Was soll

boolean punktAufLinie = d < 1E-3f; // <- beliebiges Epsilon
sein? Woher kommt 1E und 3f????
 
H

httpdigest

Top Contributor
https://en.wikipedia.org/wiki/Scientific_notation#E_notation
1E-3 steht für eine Eins mit drei führenden Nullen, also: 0.001. Das "f" ist der Suffix für eine Floating-Point-Zahl.
Gerade wenn man sehr kleine (nahe Null) Zahlen repräsentieren will, z.B. ein Nano-Irgendwas, also eine Eins mit Neun (Nano = ein Milliardstel) Nullen, braucht man nicht 0.000000001 zu schreiben und dem Leser abzuverlangen, dass er erstmal die Nullen zählt, sondern kann 1E-9 schreiben.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Developer_X Colisionserkennung Punkt -> Linie || Linie -> Linie Spiele- und Multimedia-Programmierung 5
I Wo befindet sich ein Punkt? Spiele- und Multimedia-Programmierung 6
P Winkel von einem Punkt zum anderen berechnen Spiele- und Multimedia-Programmierung 9
A Wann ist ein Punkt inerhalb eines Polygons? Spiele- und Multimedia-Programmierung 2
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
Developer_X Punkt-Winkel Berechnung Spiele- und Multimedia-Programmierung 3
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
hdi 3d punkt -> 2d punkt Spiele- und Multimedia-Programmierung 10
G Wie bekomme ich einen Punkt (Graphics) Spiele- und Multimedia-Programmierung 2
G Punkt in Image auf Transparenz prüfen Spiele- und Multimedia-Programmierung 6
G gezeichnete Elemente überprüfen ob sie ein Punkt xy abdecken Spiele- und Multimedia-Programmierung 3
A Einfacher bewegter Punkt im Frame Spiele- und Multimedia-Programmierung 6
S Punkt berechnen, nach Rotation Spiele- und Multimedia-Programmierung 2
L Punkt im 3D-Raum Spiele- und Multimedia-Programmierung 2
R Wie zeichne ich einen einzelnen Punkt Spiele- und Multimedia-Programmierung 2
A Verpixelte Linie Spiele- und Multimedia-Programmierung 1
aze Schnittmenge zwischen Linie und einer Area wegschneiden Spiele- und Multimedia-Programmierung 3
L Kreis auf Linie platzieren (-> Koordinatentransformation?) Spiele- und Multimedia-Programmierung 7
M Linie - kurvige Linie Kollisonserkennung bei Polygonen Spiele- und Multimedia-Programmierung 8
N Linie mit Rand zeichnen Spiele- und Multimedia-Programmierung 10
B Linie verankern in Java3D Spiele- und Multimedia-Programmierung 2
G Linie im Applet zeichnen Spiele- und Multimedia-Programmierung 5
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
H Eine gestrichelte Linie Spiele- und Multimedia-Programmierung 3
O Beschriftete Linie in Java 2D Spiele- und Multimedia-Programmierung 9

Ähnliche Java Themen

Anzeige

Neue Themen


Oben