Autor Beitrag
Ice
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 114



BeitragVerfasst: Di 25.02.03 13:33 
Hallo Leute,

mit folgendem Quelltext:

ausblenden volle Höhe 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 user profile iconKlabautermann: Code-Tags hinzugefügt.
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: 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.

_________________
If accidentally read, induce vomitting.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ice Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 114



BeitragVerfasst: Mi 26.02.03 09:59 
:) Alles klar vielen Dank für eure Antworten, hat mir sehr geholfen.

mfg
Ice