Delphi-PRAXiS
Seite 2 von 2     12   

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)

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 02:15 Uhr.
Seite 2 von 2     12   

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