Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- falls du euch noch ne note besser bei Krug abholen wollt :P
- Die Formal die du wohl hastest geht wohl nur komplett richtig im 1D oder so.
- Diese teilt die Ursprungs Kraft in zwei Komponenten auf über Vector Projektzierung(Dot Product)
- trennt daurch praktisch den teil der kraft der direkt auf den Schwerpunkt der anderen kugel wirkt.
- */
- //-----In-die-vec3.cpp-nach-martins-DotXY-(ist-die-3D-version)---------------------
- double Vec3::Dot(const Vec3& a) const {
- return p[0] * a.p[0] + p[1] * a.p[1] + p[2] * a.p[2];
- }
- //------In-die-vec3.hpp-einfügen-nach-martins-DotXY-(ist-die-3D-version-------------
- double Dot(const Vec3& a) const;
- //-------Drauf-achten-das-diese-listen-da-sind-oder-unter-anderen-namen-------------
- vector<Vec3>Kugel; //Kugelliste
- vector<Vec3>KugelSpeeds; //Geschwindigkeitsliste
- vector<double>KugelRadiuses; //Radiusliste
- vector<double>KugelMasses; //massenliste
- //-------Beim-erstellen-eines-ball-die-Masse-berechen-------------------------------
- void createBall(Vec3 pos, Vec3 speed, double radius){
- Kugel.push_back(pos);
- KugelSpeeds.push_back(speed);
- KugelRadiuses.push_back(radius);
- KugelMasses.push_back(0.75 * M_PI*pow(radius, 3));
- }
- //------Elastitscherstoß-der-nun-auch-in-2d-geht-(3D-noch-net-getestet)--------------
- void kugelCollision(){
- for(int i=0; i < Kugel.size(); i++){
- for(int j=0; j < Kugel.size(); j++){
- if ((Kugel[i] - Kugel[j]).Length() <= (KugelRadiuses[i] + KugelRadiuses[j])){
- Vec3 neuSpeedKugel1 = KugelSpeeds[i] - ((2 * KugelMasses[j]) / (KugelMasses[i] + KugelMasses[j])) * (((KugelSpeeds[i] - KugelSpeeds[j]).Dot(Kugel[i] - Kugel[j])) / ((Kugel[i] - Kugel[j]).Length2())) * (Kugel[i] - Kugel[j]);
- Vec3 neuSpeedKugel2 = KugelSpeeds[j] - ((2 * KugelMasses[i]) / (KugelMasses[i] + KugelMasses[j])) * (((KugelSpeeds[j] - KugelSpeeds[i]).Dot(Kugel[j] - Kugel[i])) / ((Kugel[j] - Kugel[i]).Length2())) * (Kugel[j] - Kugel[i]);
- KugelSpeeds[i] = neuSpeedKugel1;
- KugelSpeeds[j] = neuSpeedKugel2;
- }
- }
- }
- }
- //------die-version-mit-schleife-hab-ich noch-net-gestestet-also-vlt-durchs-ersetzen-kaputt
- if ((kugel1-kugel2).Length() - (radiusKugel1 + radiusKugel2) <= 0){
- Vec3 neuSpeedKugel1 = speedKugel1 - ((2 * massKugel2) / (massKugel1 + massKugel2)) * (((speedKugel1 - speedKugel2).Dot(kugel1 - kugel2)) / ((kugel1 - kugel2).Length2())) * (kugel1 - kugel2);
- Vec3 neuSpeedKugel2 = speedKugel2 - ((2 * massKugel1) / (massKugel1 + massKugel2)) * (((speedKugel2 - speedKugel1).Dot(kugel2 - kugel1)) / ((kugel2 - kugel1).Length2())) * (kugel2 - kugel1);
- speedKugel1 = neuSpeedKugel1;
- speedKugel2 = neuSpeedKugel2;
- }
Advertisement
Add Comment
Please, Sign In to add comment