Entwickler-Ecke
Sonstiges (Delphi) - Kreuzung ermitteln
Ice - Di 25.02.03 13:33
Titel: Kreuzung ermitteln
Hallo Leute,
mit folgendem Quelltext:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| function TMath.Collision(P1,P2,PW1,PW2:TPointS;Anzahl:integer):boolean;//funktion zum ermitteln ob Wand im Weg steht oder nicht var y1,y2,m1,n1,m2,n2:extended; x1,x2 : integer; begin result := false; zaehl := 0; if (P2.x-P1.x) = 0 then m1 := (P2.Y-P1.Y)/0.00001 else m1 := (P2.Y-P1.Y)/(P2.X-P1.X) n1 := P1.Y-m1*P1.X; if (PW2.X-PW1.X) = 0 then m2 := (PW2.Y-PW1.Y)/0.00001 else m2 := (PW2.Y-PW1.Y)/(PW2.X-PW1.X); n2 := PW1.Y-m2*PW1.X;// Werte ermittelt (m und n) anhand y = mx + n for x1 := 1 to Anzahl do begin for x2 := 1 to Anzahl do begin y1 := m1*x1+n1;//ermitteln der y - Werte y2 := m2*x2+n2; if(y1=y2)and(x1=x2)then // wenn x,y-Werte identisch sollen Punkte gespeichert werden begin result := true; zaehl := zaehl+1; SaveWall(zaehl,PW1,PW2); end else result := false; end; end; end; |
versuche ich herauszufinden wen sich zwei gedachte Wände kreuzen und versuche diese dann abzuspeichern,
nur leider funktioniert das nicht .... :cry:
sieht einer von euch den fehler?
Vielen dank schonmal im voraus..
mfg
Ice
Moderiert von
Klabautermann: Code-Tags hinzugefügt.
Ex0rzist - Di 25.02.03 17:24
Ist Anzahl ausreichend groß?
Weil es vorkommen kann, dass der einzige Schnittpunkt der Wände sich genau zwischen zwei X-Werten befindet und somit unbetrachtet bleibt.
Ich nehme mal, dass es sich hierbei um die Anzahl der Punkte handelt, die du untersuchst, oder?
Anstatt alle möglichen Punkte abzusuchen - die bei nichtganzzahligen Koordinaten-Werten enorm viele sind (genauer gesagt unendlich viele) - würde ich die beiden Geradengleichungen (als Vektoren) gleichsetzen.
Ich hoffe mal, dass dir das weiterhilft.
Christian S. - Di 25.02.03 20:21
Ex0rzist hat vollkommen recht. Du setzt die Gleichung der beiden Geraden gleich und verwendest zur Lösung der Gleichung in beiden Formeln das selbe x. Also: m1*x+n1 = m2*x+n2
Folgendes musst Du noch prüfen:
(1) ist m1=m2? Wenn ja, muss n2=n1 sein, damit die beiden Geraden gleich sind, ist n2<>n1 haben die beiden keinen Schnittpunkt
(2) ist die Gerade "senkrecht" handelt es sich nicht mehr um eine Funktion. Hier muss irgendein x-Wert der einen mit irgendeinem x-Wert der anderen übereinstimmen. Dann sind die beiden Wände gleich, ansonsten haben sie keinen Schnittpunkt.
MfG,
Peter
Ice - Mi 26.02.03 09:59
:) Alles klar vielen Dank für eure Antworten, hat mir sehr geholfen.
mfg
Ice
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!