Arokh
2007-07-14, 00:58:07
Hi Leute,
ich hab mir mal vorgenommen, eine Teilchensimulation von C++ nach Java zu portieren. In C++ ist sie folgendermaßen aufgebaut: es gibt eine Klasse Particle für das einzelne Teilchen und eine Klasse ParticlesModel für die Gesamtheit aller Teilchen. Nun ist wichtig, daß für jedes Teilchen drei Orts- und drei Geschwindigkeitskoordinaten gespeichert werden. Dies habe ich dadurch realisiert, daß ParticlesModel als Member einen Pointer position auf ein Array mit 6*N Elementen hat, wobei N die Teilchenzahl ist. Da Ort und Geschwindigkeit eines jeden Teilchens auch in der zugehörigen Particle-Instanz verfügbar sein sollten, hat die Klasse Particle ebenfalls einen Pointer-Member position.
Um jetzt nicht immer zwischen ParticlesModel::position und Particle::position kopieren zu müssen, habe ich das einfach so gemacht, daß ich den Member position der i-ten Particle-Instanz auf ParticlesModel::position + 6*i gesetzt habe (position ist ja ein Pointer). D.h. die Orte und Geschwindigkeiten aller Teilchen sind nur einmal gespeichert, in einem dynamisch angelegten Array, auf das ParticlesModel::position zeigt, und der Member Particle::position zeigt auf die jeweils benötigte Stelle in diesem Array.
Und genau da ist das Problem beim Portieren: in Java gibt es keine Pointer. Es würde sich anbieten, ParticlesModel.position als double[] zu realisieren, aber ich frage mich ob es eine Möglichkeit gibt, in der Klasse Particle einen Member zu realisieren, der auf den benötigten Ausschnitt zwischen dem (6*i)-ten und (6*i+5)-ten Element von ParticlesModel.position verweist?
Bis jetzt ist mir nur die Idee gekommen, jeder Particle-Instanz einen Verweis auf ParticlesModel.position mitzugeben, zusammen mit einer int-Zahl particleID, die angibt, ab welchem Element - dem (particleID*6)-ten - des Arrays die Instanz die nachfolgenden Elemente als ihre Orts- und Geschwindigkeitskoordinaten betrachten soll.
Sonderlich eleganz finde ich diese Lösung aber nicht. Jemand ne andere Idee?
ich hab mir mal vorgenommen, eine Teilchensimulation von C++ nach Java zu portieren. In C++ ist sie folgendermaßen aufgebaut: es gibt eine Klasse Particle für das einzelne Teilchen und eine Klasse ParticlesModel für die Gesamtheit aller Teilchen. Nun ist wichtig, daß für jedes Teilchen drei Orts- und drei Geschwindigkeitskoordinaten gespeichert werden. Dies habe ich dadurch realisiert, daß ParticlesModel als Member einen Pointer position auf ein Array mit 6*N Elementen hat, wobei N die Teilchenzahl ist. Da Ort und Geschwindigkeit eines jeden Teilchens auch in der zugehörigen Particle-Instanz verfügbar sein sollten, hat die Klasse Particle ebenfalls einen Pointer-Member position.
Um jetzt nicht immer zwischen ParticlesModel::position und Particle::position kopieren zu müssen, habe ich das einfach so gemacht, daß ich den Member position der i-ten Particle-Instanz auf ParticlesModel::position + 6*i gesetzt habe (position ist ja ein Pointer). D.h. die Orte und Geschwindigkeiten aller Teilchen sind nur einmal gespeichert, in einem dynamisch angelegten Array, auf das ParticlesModel::position zeigt, und der Member Particle::position zeigt auf die jeweils benötigte Stelle in diesem Array.
Und genau da ist das Problem beim Portieren: in Java gibt es keine Pointer. Es würde sich anbieten, ParticlesModel.position als double[] zu realisieren, aber ich frage mich ob es eine Möglichkeit gibt, in der Klasse Particle einen Member zu realisieren, der auf den benötigten Ausschnitt zwischen dem (6*i)-ten und (6*i+5)-ten Element von ParticlesModel.position verweist?
Bis jetzt ist mir nur die Idee gekommen, jeder Particle-Instanz einen Verweis auf ParticlesModel.position mitzugeben, zusammen mit einer int-Zahl particleID, die angibt, ab welchem Element - dem (particleID*6)-ten - des Arrays die Instanz die nachfolgenden Elemente als ihre Orts- und Geschwindigkeitskoordinaten betrachten soll.
Sonderlich eleganz finde ich diese Lösung aber nicht. Jemand ne andere Idee?