Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schnittpunkt zweier Strecken (https://www.delphipraxis.net/58493-schnittpunkt-zweier-strecken.html)

DARKLORD-X- 7. Dez 2005 21:07


Schnittpunkt zweier Strecken
 
Hallo,

kann mir jemand sagen wie ich den Schnittpunkt zweier Strecken, von denen ich jeweils Anfangs und Endpunkt kenne berechnen kann.
Sollte es mehrere Schnittpunkte geben, so sollte die Funktion den SP zurückgeben, der am nähsten am Startpunkt von Strecke 1 liegt.

Danke

BenjaminH 7. Dez 2005 21:08

Re: Schnittpunkt zweier Strecken
 
Zitat:

Zitat von DARKLORD-X-
Hallo,

kann mir jemand sagen wie ich den Schnittpunkt zweier Strecken, von denen ich jeweils Anfangs und Endpunkt kenne berechnen kann.
Sollte es mehrere Schnittpunkte geben, so sollte die Funktion den SP zurückgeben, der am nähsten am Startpunkt von Strecke 1 liegt.

Danke

Ich habe das mal so gemacht, dass ich die Strecken als Geraden behandelt hab, dann den Schnittpunkt gesucht hab und darauf verglichen hab, ob der Schnittpunkt innerhalbd er Strecken ist.

Ultimator 7. Dez 2005 21:10

Re: Schnittpunkt zweier Strecken
 
Zitat:

Zitat von DARKLORD-X-
Hallo,

kann mir jemand sagen wie ich den Schnittpunkt zweier Strecken, von denen ich jeweils Anfangs und Endpunkt kenne berechnen kann.
Sollte es mehrere Schnittpunkte geben, so sollte die Funktion den SP zurückgeben, der am nähsten am Startpunkt von Strecke 1 liegt.

Danke

Hmm, wie sollen denn zwei Strecken bitte mehr als einen Schnittpunkt haben (außer, sie liegen aufeinander ;) )?

DARKLORD-X- 7. Dez 2005 21:13

Re: Schnittpunkt zweier Strecken
 
BenjaminH: Das hab ich schon versucht, aber dann hatte ich Pobleme bei Strecken deren Start und End X Wert gleich sind. Dann kann man ja keinen Anstieg berechnen, oder?

Ultimator: Ja nur wenn sie aufeinander liegen, aber diesen Fall kann ich leider net ausschließen.

Danke

BenjaminH 7. Dez 2005 21:17

Re: Schnittpunkt zweier Strecken
 
Wenn die x werte von Start und End punkt einer Strecke gleich sind drehst du das ganze halt um 90°
//Edit:
sollten aber auch die y werte der anderen Strecke gleich sind vergleichst du halt ob sich der x wert in den möglichen x werten der anderen Strecke befindet und mit dem Y Wert genauso.
Ist das Verständlich?
Ich hab des irgendwann mal gemacht, wenn du überhaupt nicht weiterkommst kann ich nmal sehen, ob ich des
a.) nochmal zusammenbekomme oder
b.) wieder finde
eher a.
Gute Nacht :hi:

Oxmyx 7. Dez 2005 21:19

Re: Schnittpunkt zweier Strecken
 
Die Geradengleichung einer Gerade, die senkrecht nach oben zeigt bei x = 3, ist schlicht und ergreifend "x = 3". Damit kannst du ja leicht den Schnittpunkt mit einer anderen Geraden berechnen.

Oxmyx 7. Dez 2005 21:20

Re: Schnittpunkt zweier Strecken
 
Zitat:

Zitat von BenjaminH
Wenn die x werte von Start und End punkt einer Strecke gleich sind drehst du das ganze halt um 90°

Und was machst du dann bei diesen beiden Geraden?

x = 1
y = 2

BenjaminH 7. Dez 2005 21:21

Re: Schnittpunkt zweier Strecken
 
Zitat:

Zitat von Oxmyx
Die Geradengleichung einer Gerade, die senkrecht nach oben zeigt bei x = 3, ist schlicht und ergreifend "x = 3". Damit kannst du ja leicht den Schnittpunkt mit einer anderen Geraden berechnen.

Das wird dann als y=3 angegeben, oder?
//Edit
Der Rest steht im Edit, oder?

Oxmyx 7. Dez 2005 21:22

Re: Schnittpunkt zweier Strecken
 
Zitat:

Zitat von BenjaminH
Zitat:

Zitat von Oxmyx
Die Geradengleichung einer Gerade, die senkrecht nach oben zeigt bei x = 3, ist schlicht und ergreifend "x = 3". Damit kannst du ja leicht den Schnittpunkt mit einer anderen Geraden berechnen.

Das wird dann als y=3 angegeben, oder?

Ne, die Gerade y = 3 ist "waagrecht", die Gerade x = 3 ist "senkrecht".

DARKLORD-X- 7. Dez 2005 21:27

Re: Schnittpunkt zweier Strecken
 
Danke erstmal für die vielen Antworten,

ich werde mir das mit dem drehen mal überlegen, dann müsste es eigentlich gehen.
Hab ebend auch nochmal gegoogelt und das hier gefunden. Scheint ein ganz anderer Ansatz zu sein (ohne Geraden), jedoch vestehe ich net so ganz was das bedeutet.

Gute Nacht (muss morgen um 3:30 aufstehen :pale: )

Dj_Base 7. Dez 2005 21:38

Re: Schnittpunkt zweier Strecken
 
Hi!

Du musst anhand der beiden gegeben Punkte m und n für die beiden Geradengleichungen ausrechnen!
-> y = m*x+n
Dann müssen beide Gleichungen gleichgesetzt werden, um sie somit zu schneiden...

Dann kannst du aus dem ermittelten Werte durch Einsetzen die y-Koordinat ermitteln!

Fertig ist der Schnitt punkt! :thumb:

Warum ich das weiß? Habe ich grade in Mathe nochmal gemacht... :wink:

Gruß,
Dj_Base

DARKLORD-X- 7. Dez 2005 21:46

Re: Schnittpunkt zweier Strecken
 
Dj_Base: Danke, aber dann hab ich immernoch das Problem wenn X am Anfang und Ende gleich ist. Dann ist m nämlich unendlich groß. (Division durch Null)

gordon freeman 7. Dez 2005 21:52

Re: Schnittpunkt zweier Strecken
 
Das Problem, dass die Geraden aufeinander liegen könntest du mit einem simplen Vergleich der Startpunkte abfangen:
Delphi-Quellcode:
if (xs = xs2) and (ys = ys2) then
  //1. Startpunkt ausgeben
else
  //Schnittpunkt mit Geradengleichungen berechnen

glkgereon 7. Dez 2005 22:12

Re: Schnittpunkt zweier Strecken
 
Zitat:

Zitat von Oxmyx
Zitat:

Zitat von BenjaminH
Wenn die x werte von Start und End punkt einer Strecke gleich sind drehst du das ganze halt um 90°

Und was machst du dann bei diesen beiden Geraden?

x = 1
y = 2

Dann ist der Schnittpunkt S(1|2) ;)

Mein Vorschlag (Pseudocode):

Delphi-Quellcode:
if FormatOfStrecke1 = 'y=y1' then
  begin
  Sy:=y1;
  if FormatOfStrecke2 = 'y=y2' then
    begin
    if y2=y1 then OK else Abbrechen;
    end
  else if FormatOfStrecke2 = 'x=x2' then
    begin
    Sx:=x2;
    end
  else if FormatOfStrecke2 = 'y=m1*x+b1' then
    begin
    Sx:=(y2-b2)/m2;
    end;
  end
else if FormatOfStrecke1 = 'x=x1' then
  begin
  Sx:=x1;
  if FormatOfStrecke2 = 'y=y2' then
    begin
    Sy:=y2;
    end
  else if FormatOfStrecke2 = 'x=x2' then
    begin
    if x2=x1 then OK else Abbrechen;
    end
  else if FormatOfStrecke2 = 'y=m2*x+b2' then
    begin
    Sy:=m2*Sx+b2;
    end;
  end
else if FormatOfStrecke1 = 'y=m1*x+b1' then
  begin
  if FormatOfStrecke2 = 'y=y2' then
    begin
    Sy:=y2;
    Sx:=(Sy-b1)/m1;
    end
  else if FormatOfStrecke2 = 'x=x2' then
    begin
    Sx:=x2;
    Sy:=m1*Sx+b1;
    end
  else if FormatOfStrecke2 = 'y=m2*x+b2' then
    begin
    //Normale Berechnung...
    end;
  end;
Edit: Völliger Schwachsinn :gruebel:
ich überdenke das bis morgen nochmal...

Edit 2:
Jetzt aber :)

mare_crisium 7. Dez 2005 22:28

Re: Schnittpunkt zweier Strecken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Darklord,

guck' Dir doch mal den Code an, den ich für einen anderen Thread geschrieben hatte. Da ging es um die Schnittpunkte zwischen den Seiten eines Controls und einer Geraden. Dazu hatte ich eine Unit mit einer nützlichen Sammlung von Routinen für zweidimensionale Vektoren geschrieben. Darin findest Du auch eine Routine mit der Du den Schnittpunkt zweier Strecken berechnen kannst.

Sag' mal, ob Du damit was anfangen kannst.

mare_crisium

Dummy 8. Feb 2006 11:58

Re: Schnittpunkt zweier Strecken
 
Hallo mare_crisium,

ich stehe vor einem ähnlichen Problem.
Es geht darum Festzustellen ob ein Punkt in innerhalb eines Polygons liegt, das eine bestimmte Anzahl von Eckpunkten hat(X,Y Koordinaten).
Deine Unit hab ich gerade mal runtergeladen und überflogen. Alle Achtung, hast dir sehr viel Mühe gegeben und sehr ausführlich erklärt.
Werde mir deine Ausführungen heute abend mal zu gemüte führen und hoffe das ich damit weiter komme da ich mich schon seit fast einer woche mit den sch... Vektoren rumschlage. ( Sprung ins kalte Meer der Gefahren)

Wäre dir dankbar wenn mich ich ggf. noch mal an dich wenden könnte.

Bis dahin ertsmal danke für deine ausfürhliche Unit

viele grüsse
Dummy (hoch zwei)

Khabarakh 8. Feb 2006 12:54

Re: Schnittpunkt zweier Strecken
 
Mit der Ausgangsfrage hat das aber nicht mehr sehr viel zu tun :wink: . Kann das Polygon auch nichtkonvex sein?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz