dorbird

Auf auf!

Jul 10th, 2015
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1. /*
  2. falls du euch noch ne note besser bei Krug abholen wollt :P
  3. Die Formal die du wohl hastest geht wohl nur komplett richtig im 1D oder so.
  4. Diese teilt die Ursprungs Kraft in zwei Komponenten auf über Vector Projektzierung(Dot Product)
  5. trennt daurch praktisch den teil der kraft der direkt auf den Schwerpunkt der anderen kugel wirkt.
  6. */
  7. //-----In-die-vec3.cpp-nach-martins-DotXY-(ist-die-3D-version)---------------------
  8. double Vec3::Dot(const Vec3& a) const {
  9.   return p[0] * a.p[0] + p[1] * a.p[1] + p[2] * a.p[2];
  10. }
  11. //------In-die-vec3.hpp-einfügen-nach-martins-DotXY-(ist-die-3D-version-------------
  12. double Dot(const Vec3& a) const;
  13. //-------Drauf-achten-das-diese-listen-da-sind-oder-unter-anderen-namen-------------
  14. vector<Vec3>Kugel;      //Kugelliste
  15. vector<Vec3>KugelSpeeds;    //Geschwindigkeitsliste
  16. vector<double>KugelRadiuses;    //Radiusliste
  17. vector<double>KugelMasses;  //massenliste
  18. //-------Beim-erstellen-eines-ball-die-Masse-berechen-------------------------------
  19. void createBall(Vec3 pos, Vec3 speed, double radius){
  20.     Kugel.push_back(pos);
  21.     KugelSpeeds.push_back(speed);
  22.     KugelRadiuses.push_back(radius);
  23.     KugelMasses.push_back(0.75 * M_PI*pow(radius, 3));
  24. }
  25. //------Elastitscherstoß-der-nun-auch-in-2d-geht-(3D-noch-net-getestet)--------------
  26. void kugelCollision(){
  27.     for(int i=0; i < Kugel.size(); i++){
  28.         for(int j=0; j < Kugel.size(); j++){
  29.             if ((Kugel[i] - Kugel[j]).Length() <= (KugelRadiuses[i] + KugelRadiuses[j])){
  30.                 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]);
  31.                 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]);
  32.                 KugelSpeeds[i] = neuSpeedKugel1;
  33.                 KugelSpeeds[j] = neuSpeedKugel2;
  34.             }
  35.         }
  36.     }
  37. }
  38. //------die-version-mit-schleife-hab-ich noch-net-gestestet-also-vlt-durchs-ersetzen-kaputt
  39. if ((kugel1-kugel2).Length() - (radiusKugel1 + radiusKugel2) <= 0){
  40.     Vec3 neuSpeedKugel1 = speedKugel1 - ((2 * massKugel2) / (massKugel1 + massKugel2)) * (((speedKugel1 - speedKugel2).Dot(kugel1 - kugel2)) / ((kugel1 - kugel2).Length2())) * (kugel1 - kugel2);
  41.     Vec3 neuSpeedKugel2 = speedKugel2 - ((2 * massKugel1) / (massKugel1 + massKugel2)) * (((speedKugel2 - speedKugel1).Dot(kugel2 - kugel1)) / ((kugel2 - kugel1).Length2())) * (kugel2 - kugel1);
  42.     speedKugel1 = neuSpeedKugel1;
  43.     speedKugel2 = neuSpeedKugel2;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment