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

Aktuelle Zeit: Do Sep 04, 2025 00:20

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Abstand berechnen
BeitragVerfasst: Mi Apr 07, 2010 01:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hi,

ich steh grad vor nem Problem, wo ich nich so richtig weiter komm. Ich bin dabei ne Kollisionsabfrage zu machen. Dazu will ich mir das Ganze auf ne Ebene vereinfachen (reicht für meine Verhältnisse). Das Berechnen der Ebene hab ich hin bekommen. Jetzt weiß ich aber nicht, wie ich den x- bzw. z-Abstand und die Kollisionsboxen bezüglich der Ebene berechnen bzw. prüfen soll.
Zum Verständnis hab ich ma ne EXE (und ein Bild) mit angehängt wo man sich das ma angucken kann. Die beiden äußeren Punkte sind die Objekte, für die die Kollision geprüft werden soll. Die weiße Linie ist die direkte Verbindungslinie der 2 Objekte. der Punkt auf der Linie spannt die grüne Ebene auf. Jetzt brauch ich den Abstand der 2 Objekte und die Kollisionsboxen bez. X und Z-Achse der grünen Ebene. Wie mach ich das?

MfG & Thx Bergmann.


Dateianhänge:
pic.JPG [21.25 KiB]
Noch nie heruntergeladen
exe.rar [179.09 KiB]
396-mal heruntergeladen

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Abstand berechnen
BeitragVerfasst: Mi Apr 07, 2010 09:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Hier einfach mal was Code aus meinem alten Projekt. Ist die 3D-Kollision zwischen zwei BoundingBoxen. Ob dir das hilft musst du selbst entscheiden.

Code:
   // transform BoundingBox of pR1 into space of pR2
   CFrame7f toOther = pOther->prediction.getInverse() * prediction;
   CMatrix44f matrix = toOther.getMatrix();
   CVector3f min = pR1->min;
   CVector3f max = pR1->max;
   CVector3f point[8];
   point[0] = CVector3f(min.x,min.y,min.z) * matrix;
   point[1] = CVector3f(max.x,min.y,min.z) * matrix;
   point[2] = CVector3f(min.x,max.y,min.z) * matrix;
   point[3] = CVector3f(max.x,max.y,min.z) * matrix;
   point[4] = CVector3f(min.x,min.y,max.z) * matrix;
   point[5] = CVector3f(max.x,min.y,max.z) * matrix;
   point[6] = CVector3f(min.x,max.y,max.z) * matrix;
   point[7] = CVector3f(max.x,max.y,max.z) * matrix;
   min = max = point[0];
   for (int i=1; i<8; ++i) {
      if (point[i].x < min.x) { min.x = point[i].x; }
      if (point[i].y < min.y) { min.y = point[i].y; }
      if (point[i].z < min.z) { min.z = point[i].z; }
      if (point[i].x > max.x) { max.x = point[i].x; }
      if (point[i].y > max.y) { max.y = point[i].y; }
      if (point[i].z > max.z) { max.z = point[i].z; }
   }

   // test boxes (quick test, axis aligned only)
   if (!(max >= pR2->min && min <= pR2->max)) {
      return false;
   }

   // full test
   CPlane3f plane;
   CVector3f nearest;
   min = pR2->min;
   max = pR2->max;
   for (int i=0; i<6; ++i) {
      switch (i) {
         case 0: plane = CPlane3f(point[4], point[0], point[1]); break;
         case 1: plane = CPlane3f(point[0], point[2], point[3]); break;
         case 2: plane = CPlane3f(point[1], point[3], point[7]); break;
         case 3: plane = CPlane3f(point[5], point[7], point[6]); break;
         case 4: plane = CPlane3f(point[4], point[6], point[2]); break;
         case 5: plane = CPlane3f(point[2], point[6], point[7]); break;
      }
      nearest.x = (plane.a > 0.0f) ? min.x : max.x;
      nearest.y = (plane.b > 0.0f) ? min.y : max.y;
      nearest.z = (plane.c > 0.0f) ? min.z : max.z;
      if (plane * nearest + plane.d > 0.0f) {
         return false;
      }
   }
   return true;

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Abstand berechnen
BeitragVerfasst: Mi Apr 07, 2010 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich habs jetzt so gemacht, das ich mir mit dem Skalarprdukt den Winkel zwischen der Schnittgeraden und dem z-Vektor der Ebene berechnet hab. Der Rest is dann nur noch bisl sin und cos...

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


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


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.009s | 15 Queries | GZIP : On ]