dorbird icon

Auf auf!

dorbird | PRO | 07/10/15 06:46:45 PM UTC | 0 ⭐ | 276 👁️ | Never ⏰ | []
C++ |

2.57 KB

|

None

|

0 👍

/

0 👎

/*
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;
}

Comments