diff --git a/build/bin/mainV8.exe b/build/bin/mainV8.exe index 2eefb28..1b6ac81 100644 Binary files a/build/bin/mainV8.exe and b/build/bin/mainV8.exe differ diff --git a/src/pieces/methods/caviglia_class.cpp b/src/pieces/methods/caviglia_class.cpp index 7acf43c..a1ea29e 100644 --- a/src/pieces/methods/caviglia_class.cpp +++ b/src/pieces/methods/caviglia_class.cpp @@ -2,7 +2,7 @@ Caviglia::Caviglia(rb::Vector3 coords, _Float16 mass){ rb::Vector3 com = {caviglia_Dim.x/2,caviglia_Dim.x/2, caviglia_Dim.y/2}; - body = rb::rigidbody(coords, com, mass); + body = rb::rigidbody(coords, com, mass, caviglia_Dim.x/2); color = caviglia_Col; globalPos = {0,0,0}; diff --git a/src/pieces/methods/coscia_class.cpp b/src/pieces/methods/coscia_class.cpp index cd510d0..d8e0709 100644 --- a/src/pieces/methods/coscia_class.cpp +++ b/src/pieces/methods/coscia_class.cpp @@ -2,7 +2,7 @@ Coscia::Coscia(rb::Vector3 coords, _Float16 mass){ rb::Vector3 com = {coscia_Dim.x/2,coscia_Dim.z/2,coscia_Dim.y/2}; - body = rb::rigidbody(coords, com, mass); + body = rb::rigidbody(coords, com, mass, coscia_Dim.z/2); color = coscia_Col; globalPos = {0,0,0}; initialize_shapes(coscia_Dim); diff --git a/src/pieces/methods/sensore_class.cpp b/src/pieces/methods/sensore_class.cpp index e776d6a..94f8218 100644 --- a/src/pieces/methods/sensore_class.cpp +++ b/src/pieces/methods/sensore_class.cpp @@ -3,7 +3,7 @@ Sensore::Sensore(rb::Vector3 coords, _Float16 mass){ rb::Vector3 com = {sensore_Dim.x/2,sensore_Dim.z/2, sensore_Dim.y/2}; - body = rb::rigidbody(coords, com, mass); + body = rb::rigidbody(coords, com, mass, sensore_Dim.z/2); color = sensore_Col; globalPos = {0,0,0}; initialize_shapes(sensore_Dim); diff --git a/src/pieces/methods/torso.cpp b/src/pieces/methods/torso.cpp index dbb49bf..a48c7f7 100644 --- a/src/pieces/methods/torso.cpp +++ b/src/pieces/methods/torso.cpp @@ -2,7 +2,7 @@ Torso::Torso(rb::Vector3 coords, _Float16 mass){ rb::Vector3 com = {torso_Dim.x/2, torso_Dim.y/2, torso_Dim.z/2}; - body = rb::rigidbody(coords,com, mass); + body = rb::rigidbody(coords,com, mass, torso_Dim.y/2); color = torso_Col; globalPos = {0,0,0}; diff --git a/src/rigidbody/headers/rb.hpp b/src/rigidbody/headers/rb.hpp index 3b52bea..6f1e176 100644 --- a/src/rigidbody/headers/rb.hpp +++ b/src/rigidbody/headers/rb.hpp @@ -16,7 +16,9 @@ Vector3 acc = {0,0,0}; Vector3 rot = {0,0,0}; Vector3 tanAcc = {0,0,0}; + Vector3 tanVel = {0,0,0}; + float R = 1; _Float16 mass = 1; Vector3 coords = {0,0,0}; @@ -34,8 +36,8 @@ public: - rigidbody(){} - rigidbody(Vector3 coords, Vector3 centerOfMass, _Float16 mass); + rigidbody(){ } + rigidbody(Vector3 coords, Vector3 centerOfMass, _Float16 mass, float radius); ~rigidbody(); @@ -45,7 +47,7 @@ void setRot(const Vector3 Nrot); void setVel(const Vector3 Nacc); void setAcc(const Vector3 Nvel); - void setTanAcc(const Vector3 Dacc, const Vector3 pos); + void setTanAcc(const Vector3 Dacc); void step(const sf::Clock time); //complesso, deve definire accelerazione e accelerazione tangenziale diff --git a/src/rigidbody/methods/rb_class.cpp b/src/rigidbody/methods/rb_class.cpp index 943f3bf..7b0fb78 100755 --- a/src/rigidbody/methods/rb_class.cpp +++ b/src/rigidbody/methods/rb_class.cpp @@ -3,7 +3,7 @@ using namespace rb ; -rigidbody::rigidbody(Vector3 coords, Vector3 centerOfMass, _Float16 mass) +rigidbody::rigidbody(Vector3 coords, Vector3 centerOfMass, _Float16 mass, float radius) { if (coords.size() != 3) throw "Coords must be 3"; if (centerOfMass.size() != 3) throw "COM coords must be 3"; @@ -11,7 +11,7 @@ rigidbody::rigidbody(Vector3 coords, Vector3 centerOfMass, _Float16 mass) this->coords = coords; this->centerOfMass = centerOfMass; this->mass = mass; - + this->R = radius; } rigidbody::~rigidbody() @@ -37,7 +37,7 @@ void rigidbody::setPos(Vector3 Npos){ } void rigidbody::setAcc(const Vector3 Nacc){ - if (Nacc.size() != 3) throw "Vel vector must be 3 in lenght!"; + if (Nacc.size() != 3) throw "Acc vector must be 3 in lenght!"; int i = 0; for (float axis : Nacc){ @@ -93,15 +93,42 @@ void rigidbody::step(const sf::Clock time){ float dt = (float(Dtime) / 1000000.0) - (float(prevT) / 1000000.0); prevT = Dtime; + calcRot(dt); calcPos(dt); calcVel(dt); } -void rigidbody::setTanAcc(const Vector3 Dacc, const Vector3 pos){ - +void rigidbody::setTanAcc(const Vector3 Dacc){ + if (Dacc.size() != 3) throw "Vel vector must be 3 in lenght!"; + + int i = 0; + for (float a : Dacc ){ + tanAcc[i] = a; + i++; + } + } void rigidbody::calcRot(const float Dtime){ + // Ds = wt +1/2*at^2 -> l'accelerazione angolare la trovo ac = v^2/R + Vector3 tmpVel; + for (float a : tanAcc){ + tmpVel.push_back( a*Dtime ); + } + int i = 0; + for (float nv : tmpVel){ + tanVel[i++] += nv; + } + + Vector3 tmpTanAcc; + for (int i = 0; i<3; i++){ + tmpTanAcc.push_back( pow(tanVel[i],2) / R ); + } + + i=0; + for (auto axes : rot){ + axes += 0.5 * tmpTanAcc[i] * pow(Dtime,2); + } }