T
Guten Abend,
seit nunmehr eineinhalb Jahren programmiere ich an Feierabenden an einem Tool, dass eine Mehrkörpersimulation - Feder, Dämpfer, Masse Verbindungen - in ein paar Klicks ermöglichen soll. Das Interface arbeitet bei der Darstellung mit einer Kombination aus OpenGL und dem Borland C++ Builder 4 unter Windows 2000. Die Algorithmen greifen auf eine Mathematik Bibliothek zu, die die Klassen Matrix und Solver zur Verfügung stellt. Mit einem universellen Lösungsalgolrithmus können inzwischen Systeme mit bis zu 300 Freiheitsgraden flüssig in Echtzeit simuliert werden.
Bisher sind im Programm folgende Features eingebaut:
Modellierung von Knoten, Massen, Federn, Dämpfer, Balken
Schwarmalgorithmus
Darstellung in OpenGL inklusive Picking
Komplette Steuerung über GUI und/oder Eingabescripten (welches auch gleichzeitig die Speicherdatei ist)
Features, die in nächster Zeit eingebaut werden:
Koordinatensysteme
impliziter Solver, Trapezregel, Runge Kutta höherer Ordnung
Schrittweitensteuerung
Scheiben, Flächen
Laden und Darstellen von m3d,3ds,dxf,iges-Dateien (Softbody, u.a.)
Rotationsfreiheitsgrade
Randbedingungen (g, Auslenkungen, Stoß, Reibung)
Klasse Plot
Parser für Befehle zur Laufzeit
Das Herzstück des Programms, die DLL, habe ich leider nur mit viel Trial and Error programmieren können. Da ich kein Informatiker bin, fehlen mir in C++ einige vertiefte Kenntnisse über Zeiger, Adressen und Speicherverwaltung. Von dem Codeschnipsel, der aus der DLL stammt, kann ich zum Beispiel nur die Hälfte erklären, obwohl sie irgendwann mal von mir programmiert wurde...:(
//---------------------------------------------------------------------------
XMatrix &XMatrix::operator = (XMatrix &mat){
//---------------------------------------------------------------------------
int r = mat.X_Row();
int c = mat.X_Col();
MatrixResize(r,c);
for (register int i=0;i<r;i++)
memcpy(m[i],(mat.MatrixReturn())[i],c*sizeof(float));
return *this;
}
Und genau aus diesem Grund bräuchte ich etwas Hilfe.
Vielleicht schaffe ich es in den nächsten Tagen ein paar Screenshots hochzuladen, damit man einen kleinen Eindruck von der Oberfläche erhält.
Es wäre schön, wenn der-/diejenige, die Lust hat, sich an der Entwicklung zu beteiligen ein paar Grundkenntnisse in Numerik hätte und/oder im Umgang mit dem Bronstein, Engeln-Müllges oder dem Dubbel vertraut ist (oder schonmal davon gehört hat).
In diesem Sinne
TAlex
p.s. Um dem Ganzen etwas den Wind aus den Segeln zu nehmen:
fast alles was an Mathematik umgesetzt ist, stammt aus dem Bronstein
fast alles was in OpenGL dargestellt wird, kann bei NeHe nachgeslesen werden
fast alles was an GUI's benutzt wird, ist über die IDE des BCB erzeugt worden