Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 18:18

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Tutorial Seperating Axis Theorem
BeitragVerfasst: So Sep 30, 2007 09:39 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Ich hab mich bislang noch nicht mit dem tutorial beschäftigt, aber ein bekannter gab vor kurzem diesen kommentar zum Tutorial ab:

Zitat:
und als Gegenbeispiel zweier sich nicht schneidender
Polygone, die nach dem Algorithmus nicht als solche
entlarvt werden, nehme man die Dreiecke mit den Eck-
punkten (0,0), (10,0), (5,1) und (0,2), (10,2), (5,3).


Das müsste vielleicht geprüft werden :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 30, 2007 13:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Huh? Ich glaube da hat sich doch ein kleiner Verständnisfehler bei deinem Bekannten eingeschlichen.

Nimmt man einfach mal den Vektor von (0|0) nach (10|0), die Einheitsnormale dazu: (0|1)

Dreieck 1:
(0|1) dot (0|0) = 0
(0|1) dot (10|0) = 0
(0|1) dot (5|1) = 1
A = [0;1]

Dreieck 2:
(0|1) dot (0|2) = 2
(0|1) dot (10|2) = 2
(0|1) dot (5|3) = 3
B = [2;3]

A und B haben keine Schnittmenge, denn
max(A) < min(B) = 1 < 2

Und laut Algorithmus sind keine weiteren Schritte notwendig, daimt gibt keine Schnittmenge der beiden Dreiecke.

Btw: Funktionenplotter gibt es ja wie Sand am Meer, aber gibt es eigentlich auch sowas wie Polygonplotter? (zB. um sich solche Probleme kurz zu visualisieren) :?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 30, 2007 14:13 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi,

lade dir doch eine der demos runter und ändere die koordinaten der beiden polygone fix in die von Nico, dann kannst du sehen, ob sie sich schneiden.
Und einen Polygonplotter habe ich hier veröffentlicht: http://www.exec-dev.de/?m=polyshapes
Der ist eigentlich dazu gedacht, um HTML Shapes (Polygone) zu visualisieren.

€: Die beiden von dir genannten Dreiecke haben einen gemeinsamen Punkt, deshalb wird (meiner Meinung nach korrekterweise) eine Kollision erkannt.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 30, 2007 14:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
So fantasielos bin ich dann doch nicht, dass ich sie mir nicht auch vorstellen könnte. Aber grade solchen Antworten hier:
Zitat:
€: Die beiden von dir genannten Dreiecke haben einen gemeinsamen Punkt, deshalb wird (meiner Meinung nach korrekterweise) eine Kollision erkannt.

wollte ich gleich vorbeugen. ;) Aber spannend es ist es allemal: Wo siehst du denn da eine Kollision? Und welchen Punkt haben beide Dreiecke gemeinsam?

Dein Polyshapes mag sich für das schnelle Anschauen von HTML-Polyshapes eignen, aber ich persönlich dachte da dann doch an eine mathematischere Umgebung mit Skalierung, Koordinatenkreuz, Einfärbung, Schnittmengen/Kollisionserkennung ;) usw. Was man halt vom einen oder anderen Funktionsplotter her kennt.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 30, 2007 15:02 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich hab mich vertan, ich dachte, beide hätten den punkt 10,0
und der Algo gibt auch zurück, dass keine Kollision stattfindet, also alles in Ordnung.

Code:
  1.  
  2.   A := TPolygon.Create;
  3.   B := TPolygon.Create;
  4.   with A do
  5.   begin
  6.     position := to_v2f(0, 0);
  7.     AddVertex(to_v2f(0, 0));
  8.     AddVertex(to_v2f(1, 0));
  9.     AddVertex(to_v2f(5, 1));
  10.   end;
  11.   with B do
  12.   begin
  13.     position := to_v2f(0, 0);
  14.     AddVertex(to_v2f(0, 2));
  15.     AddVertex(to_v2f(10, 2));
  16.     AddVertex(to_v2f(5, 3));
  17.   end;
  18.   if PolyPolyIntersect(A, B) then
  19.     showmessage('Kollision!');
  20.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 30, 2007 15:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Einmal per Mathematik, einmal per Compiler/CPU... was fehlt?
Richtig, die Visualisierung, erzeugt via math4u2. (siehe Anhang)
@Seth: So zum Vergleich hab ich mir die Sache nämlich eher vorgestellt. :)

MfG


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 14:53 
Offline
DGL Member

Registriert: Mi Nov 28, 2007 17:30
Beiträge: 1
Hallo,
erstmal danke für das Tutorial, das hat mir sehr weitergeholfen! :)

Ich habe bloß noch ein Problem mit dem MTD-Vektor...
Ich bekomm zwar die richtige Tiefe raus, nur bei der Richtung des MTD gibts noch ein Problem: der zeigt bei mir manchmal um 180° in die falsche Richtung, und ich bin mir nicht sicher, wie das behoben werden kann.
Im Tutorial heisst es, "man [sollte] vor der Verwendung sicherstellen, dass dieser Vektor vom Polygon wegzeigt".
Im mitgelieferten Source wird das gemacht, in dem man das Skalarprodukt zwischen dem MTD und dem Offsetvektor (Differenz zwischen den Positionsvektoren der beiden Polygone) berechnet...
Irgendwie kann ich mir nicht vorstellen, wie das funktionieren soll.
Die Positionsvektoren zeigen auf irgend einen Punkt, zu dem das Polygon dann relativ gesetzt wird. Dieser Punkt kann ja irgendwo im Polygon liegen - oder sogar ausserhalb.
Da könnte ich ja dann genausogut die Differenz zwischen irgendwelchen Eckpunkten der beiden Polygone bilden, oder?

Bei mir funktioniert das mit dem MTD so jedenfalls nicht, und auch im mitgelieferten Beispiel scheint da ein Fehler zu sein (siehe Anhang).

Hat jemand ne Idee, wies richtig wäre?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.040s | 17 Queries | GZIP : On ]