Schön währe ein Artikel zur Kollisionserkennung. Also so ne classe die Jedes mit Jedem Testen kann.
Ne Erklährung der dahinterstehenden Ideen währe auch schön.
Punkt
Kugel
Linie
Strahl
Würfel
Quader
Zylinder
Ebene
Dreieck
Vielecke
Kegel ?
Pyramiede ?
usw.
Schließlich bracht man sowas häufiger, wenn man sich mit 3D Grafik beschäftigt.
Und ich habe im Netzt noch keine WIRKLICH brauchbare Sammlung gesehen
(Nur hier mal das eine und dort das andere)
edit by GPC: Vernünftigen Titel gesetzt und 'n Autorengesuch draus gemacht
Zuletzt bearbeitet von estartu am 14:26:10 14.01.2008, insgesamt 3-mal bearbeitet
Das Problem ist, dass das vermutlich entweder ein sehr theoretischer Artikel werden würde, oder aber sich auf eine bestimmte Bibliothek konzentrieren würde (OGL, DX, whatever).
2D ist ja kein Problem, aber bei 3D ... Allerdigns wird einem dass von einer Physik-Engine i.d.R. abgenommen.
Interessant fände ich es aber schon ...
Zuletzt bearbeitet von Reyx am 10:06:53 13.08.2006, insgesamt 1-mal bearbeitet
Das Problem ist, dass das vermutlich entweder ein sehr theoretischer Artikel werden würde, oder aber sich auf eine bestimmte Bibliothek konzentrieren würde (OGL, DX, whatever).
2D ist ja kein Problem, aber bei 3D ... Allerdigns wird einem dass von einer Physik-Engine i.d.R. abgenommen.
Interessant fände ich es aber schon ...
Warum ne Bibliothek?
3 Vectoren bestimmen nen Dreieck
2 Dreiecke kollidieren (Beispielcode) usw.
Da braucht man keine Bibliotheken. Denn so ne Vectorclasse währe schnell gemacht. Aber hinter den Kollisionen steckt mehr Mathematik ...
C/C++ Code:
Allerdigns wird einem dass von einer Physik-Engine i.d.R. abgenommen.
C/C++ Code:
Allerdigns wird einem dass von einer Physik-Engine i.d.R. abgenommen.
C/C++ Code:
Allerdigns wird einem dass von einer Physik-Engine i.d.R. abgenommen.
Das würde mich auch Interessieren. Die Vectorclasse würde ich jka noch selber zusammenfrickeln können und auch die einfachen Kollisionen wie z.B.
Kugel vs Kugel
Ebene vs Gerade
Aber die komplizierteren währen schon interessant.
Vor allem wenn man das Rad nicht immer neu erfinden will, sondern eine Klasse mit gut durchdachtem code hätte mit Kommentaren, die ETWAS die Idee dahinter beschreiben würde.
Was heißt Idee dahinter?
Um die Objekte zu erkennen, wenn du eine Basisklasse hast benötigst du Double-Dispatching. Gibts verschiedene Möglichkeiten zu(siehe z.B. Effektiv C++ oder Modernes C++ Design).
Der Rest ist dann reine Mathematik. Da hilft dann u.U. der alte Mathehefter
Schön währe ein Artikel zur Kollisionserkennung. Also so ne classe die Jedes mit Jedem Testen kann.
Ne Erklährung der dahinterstehenden Ideen währe auch schön.
Punkt
Kugel
Linie
Strahl
Würfel
Quader
Zylinder
Ebene
Dreieck
Vielecke
Kegel ?
Pyramiede ?
usw.
Schließlich bracht man sowas häufiger, wenn man sich mit 3D Grafik beschäftigt.
Und ich habe im Netzt noch keine WIRKLICH brauchbare Sammlung gesehen
(Nur hier mal das eine und dort das andere)
edit by GPC: Vernünftigen Titel gesetzt und 'n Autorengesuch draus gemacht
Würde mich auch interessieren. Vor allem wie man das gut realisiert. Ich würde da mit Doubledispatching vorgehen und dann alle Kombinationen durchgehen. Geht wahrscheinlich mit einer gescheiten Klassenhierarchie aber besser und man muss nicht alle Kombinationen durchnehmen.
Vielleicht auch einfach statisches Funktionsüberladen einsetzen. Eine Physikengine müsste es wahrscheinlich anders machen aber für diesen Artkiel müsste das andere doch völlig reichen. In etwa so
// Vielleicht ganz ohne Vektorklasse un nur Point + Translation?
// Würde dennen die nicht so gewandert in den Mathebegriffen sind wahrscheinlich
// viel helfen. typedef Vector3D Point;
typedef Vector3D Translation;
// Kommt immer als letztes dran template<class Shape1, class Shape2>
bool is_collision(const Shape1&s1, const Shape2&s2){
return is_collision(s2, s1);
}
// Vielleicht ganz ohne Vektorklasse un nur Point + Translation?
// Würde dennen die nicht so gewandert in den Mathebegriffen sind wahrscheinlich
// viel helfen. typedef Vector3D Point;
typedef Vector3D Translation;
// Kommt immer als letztes dran template<class Shape1, class Shape2>
bool is_collision(const Shape1&s1, const Shape2&s2){
return is_collision(s2, s1);
}
// Vielleicht ganz ohne Vektorklasse un nur Point + Translation?
// Würde dennen die nicht so gewandert in den Mathebegriffen sind wahrscheinlich
// viel helfen. typedef Vector3D Point;
typedef Vector3D Translation;
// Kommt immer als letztes dran template<class Shape1, class Shape2>
bool is_collision(const Shape1&s1, const Shape2&s2){
return is_collision(s2, s1);
}
Die Mathematik ist mir größtenteils bekannt allerdings ist bestimmt interessant für die die sie noch nicht kennen. Grundwissen in der Vektor-Mathematik müsste doch aber vorhanden sein oder?
Man wird auch ein Paar gute 3D Graphiken brauchen. Kennt da jemand ein gutes Programm?
Zitat:
Da ich daran komplett scheitere, wollte ich mal fragen wie du das machst?
Entweder Ebene und Gerade sind parallel oder sie schneiden sich. Wie man das am besten testet hängt davon ab wie du deine Gerade und deine Ebene Strukturen definiert hast.
Zuletzt bearbeitet von Ben04 am 23:30:09 09.01.2007, insgesamt 1-mal bearbeitet
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.