From aaf2b7c4307ff9f24e66e966ae1732fcd15c6e58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9goire=20Payen=20de=20La=20Garanderie?=
 <gregoire.payendelagaranderie@telecom-bretagne.eu>
Date: Sun, 16 Jan 2011 14:38:44 +0100
Subject: [PATCH] typdef float Distance; :-)

---
 include/distance.h          | 28 +++------------
 include/simul/element.h     |  2 +-
 src/Position.cpp            | 30 ++++------------
 src/PositionPlusAngle.cpp   |  2 +-
 src/asservissement.cpp      | 30 ++++++++--------
 src/distance.cpp            | 71 ++-----------------------------------
 src/pid_filter_distance.cpp |  6 ++--
 src/simul/element.cpp       |  2 +-
 src/simul/robot.cpp         | 16 ++++-----
 9 files changed, 43 insertions(+), 144 deletions(-)

diff --git a/include/distance.h b/include/distance.h
index 84fe6abe..a424fda4 100755
--- a/include/distance.h
+++ b/include/distance.h
@@ -1,26 +1,8 @@
-#ifndef DISTANCE_H_INCLUDED
+#ifndef DISTANCE_H_INCLUDED
 #define DISTANCE_H_INCLUDED
 
-class Distance{
-    private:
-    float value;
+typedef float Distance;
 
-    public:
-    float getValueInMillimeters() const;
-    Distance();
-    Distance(float distance_en_millimetres);
-    Distance operator+(const Distance &dist);
-    Distance operator-(const Distance &dist);
-    Distance operator-() const;
-    Distance operator*(const Distance &dist);
-    Distance operator*(float dist);
-    Distance operator=(const Distance &dist);
-    Distance operator+=(const Distance &dist);
-    Distance operator-=(const Distance &dist);
-    bool operator==(const Distance &d);
-    bool presqueEgales(const Distance &d);
-    bool operator>(const Distance &dist);
-    bool operator<(const Distance &dist);
-};
-
-#endif // DISTANCE_H_INCLUDED
+bool presqueEgales(Distance d1, Distance d2);
+
+#endif // DISTANCE_H_INCLUDED
diff --git a/include/simul/element.h b/include/simul/element.h
index 25c78aa6..6f6357dc 100644
--- a/include/simul/element.h
+++ b/include/simul/element.h
@@ -28,7 +28,7 @@ public:
 		pa.setBrush(QBrush(QColor("yellow")));
 		pa.setPen(QBrush(QColor("yellow")));
 
-		pa.drawEllipse(QPoint(p.x.getValueInMillimeters(),p.y.getValueInMillimeters()),100,100);
+		pa.drawEllipse(QPoint(p.x,p.y),100,100);
 	}
 
 	void updatePos();
diff --git a/src/Position.cpp b/src/Position.cpp
index 8c3f283a..7cda4937 100755
--- a/src/Position.cpp
+++ b/src/Position.cpp
@@ -1,8 +1,7 @@
 #include "Position.h"
+#include "distance.h"
 #include <math.h>
 
-/*Toutes les paramètres doivent être donnés en centimètre */
-
 Position::Position(Distance blah_x, Distance blah_y) : x(blah_x), y(blah_y){
 }
 
@@ -39,33 +38,18 @@ Position Position::operator-=(const Position &position){
 }
 
 bool Position::presqueEgales(const Position &p){
-    if(this->x.presqueEgales(p.x) && this->y.presqueEgales(p.y))
-        return true;
-    return false;
-    /*if((this->x-p.x)*(this->x-p.x) + (this->y-p.y)*(this->y-p.y) < 1.41)
-        return true;
-    return false;*/
+	return ::presqueEgales(x, p.x) && ::presqueEgales(y,p.y);
 }
 
 bool Position::operator==(const Position &p){
     return (this->x == p.x && this->y == p.y);
-    /*return (this->x-p.x) == 0
-           && (this->y-p.y) == 0;*/
 }
 
-Distance Position::getNorme(void){
-    return Distance(sqrt(x.getValueInMillimeters()*x.getValueInMillimeters()+y.getValueInMillimeters()*y.getValueInMillimeters()));
+Distance Position::getNorme(){
+    return Distance(sqrt(x*x+y*y));
 }
 
-Angle Position::getAngle(void){
-    if(x==Distance(0)){
-        return y>Distance(0) ? Angle(M_PI_2) : Angle(-M_PI_2);
-    }
-    else if(x>Distance(0)){
-        return Angle(atan(y.getValueInMillimeters()/x.getValueInMillimeters()));
-    }
-    else {
-        double tmp_val = atan(y.getValueInMillimeters()/x.getValueInMillimeters());
-        return tmp_val>0 ? Angle(-M_PI+tmp_val) : Angle(M_PI+tmp_val);
-    }
+Angle Position::getAngle()
+{
+	return atan2(y,x);
 }
diff --git a/src/PositionPlusAngle.cpp b/src/PositionPlusAngle.cpp
index 2411abc0..e9db82d0 100755
--- a/src/PositionPlusAngle.cpp
+++ b/src/PositionPlusAngle.cpp
@@ -9,7 +9,7 @@ PositionPlusAngle::PositionPlusAngle(Position pos, Angle ang) : position(pos), a
 
 PositionPlusAngle PositionPlusAngle::operator+(const Distance &distance)
 {
-    return PositionPlusAngle(Position(position.x.getValueInMillimeters() + distance.getValueInMillimeters()*cos(angle.getValueInRadian()), position.y.getValueInMillimeters() + distance.getValueInMillimeters()*sin(angle.getValueInRadian())), angle);
+    return PositionPlusAngle(Position(position.x + distance*cos(angle.getValueInRadian()), position.y + distance*sin(angle.getValueInRadian())), angle);
 }
 
 PositionPlusAngle PositionPlusAngle::operator-(const Distance &distance)
diff --git a/src/asservissement.cpp b/src/asservissement.cpp
index e3e7c970..d908469f 100755
--- a/src/asservissement.cpp
+++ b/src/asservissement.cpp
@@ -101,7 +101,7 @@ void Asservissement::update(void)
         Distance vitesse_lineaire_atteinte = odometrie->getVitesseLineaire();
 
         buffer_collision <<= 1;
-        bool tmp = (fabs((vitesse_lineaire_atteinte - vitesse_lineaire_a_atteindre).getValueInMillimeters()) < seuil_collision);
+        bool tmp = (fabs((vitesse_lineaire_atteinte - vitesse_lineaire_a_atteindre)) < seuil_collision);
         buffer_collision |= tmp;
 
 
@@ -145,15 +145,15 @@ void Asservissement::update(void)
 
         //roueGauche[caca] = odometrie.roueCodeuseGauche->getTickValue();
         //roueDroite[caca] = odometrie.roueCodeuseDroite->getTickValue();
-                        /*vitesseLin[caca] = vitesse_lineaire_atteinte.getValueInMillimeters();
-                        vitesseLinE[caca] = vitesse_lineaire_a_atteindre.getValueInMillimeters();
+                        /*vitesseLin[caca] = vitesse_lineaire_atteinte;
+                        vitesseLinE[caca] = vitesse_lineaire_a_atteindre;
                         linearDuty[caca] = linearDutySent;*/
                         /*vitesseAng[caca] = vitesse_angulaire_atteinte.getValueInRadian();
                         vitesseAngE[caca] = vitesse_angulaire_a_atteindre.getValueInRadian();
                         angularDuty[caca] = angularDutySent;*/
-                        posx[caca] = positionPlusAngleActuelle.position.x.getValueInMillimeters();
-                        posy[caca] = positionPlusAngleActuelle.position.y.getValueInMillimeters();
-                        angle[caca] = positionPlusAngleActuelle.angle.getValueInRadian(); //*angle_restant.getValueInRadian();*/distance_restante.getValueInMillimeters(); //positionPlusAngleActuelle.angle.getValueInRadian()*180/M_PI;
+                        posx[caca] = positionPlusAngleActuelle.position.x;
+                        posy[caca] = positionPlusAngleActuelle.position.y;
+                        angle[caca] = positionPlusAngleActuelle.angle.getValueInRadian(); //*angle_restant.getValueInRadian();*/distance_restante; //positionPlusAngleActuelle.angle.getValueInRadian()*180/M_PI;
                         caca++;
                     }
                     toto = 0;
@@ -225,20 +225,20 @@ Distance Asservissement::getVitesseLineaireAfterTrapeziumFilter(Distance vitesse
 {
 
     // Le pivot est la distance que l'on parcourerait si on commencait à décélérer dès maintenant jusqu'une vitesse nulle
-    Distance pivot(vitesse_lineaire_a_atteindre.getValueInMillimeters()*vitesse_lineaire_a_atteindre.getValueInMillimeters()/(2*acceleration_lineaire.getValueInMillimeters()));
-    if( (distance_restante-pivot).getValueInMillimeters()<=0 &&
-         ((fabs((angle_restant - Angle(0)).getValueInRadian())>M_PI_2 && vitesse_lineaire_atteinte.getValueInMillimeters()<=0)
-          || (fabs((angle_restant - Angle(0)).getValueInRadian())<=M_PI_2 && vitesse_lineaire_atteinte.getValueInMillimeters()>=0))
+    Distance pivot(vitesse_lineaire_a_atteindre*vitesse_lineaire_a_atteindre/(2*acceleration_lineaire));
+    if( (distance_restante-pivot)<=0 &&
+         ((fabs((angle_restant - Angle(0)).getValueInRadian())>M_PI_2 && vitesse_lineaire_atteinte<=0)
+          || (fabs((angle_restant - Angle(0)).getValueInRadian())<=M_PI_2 && vitesse_lineaire_atteinte>=0))
          && stop)
     {
         //On est proche de la cible et l’on doit décélerer
-        if(vitesse_lineaire_a_atteindre.getValueInMillimeters()>0)
+        if(vitesse_lineaire_a_atteindre>0.)
         {
-            return vitesse_lineaire_a_atteindre-Distance(min(vitesse_lineaire_a_atteindre.getValueInMillimeters(), acceleration_lineaire.getValueInMillimeters()));
+            return vitesse_lineaire_a_atteindre-Distance(min(vitesse_lineaire_a_atteindre, acceleration_lineaire));
         }
         else
         {
-            return vitesse_lineaire_a_atteindre-Distance(max(vitesse_lineaire_a_atteindre.getValueInMillimeters(), -acceleration_lineaire.getValueInMillimeters()));
+            return vitesse_lineaire_a_atteindre-Distance(max(vitesse_lineaire_a_atteindre, -acceleration_lineaire));
         }
 
     }
@@ -249,7 +249,7 @@ Distance Asservissement::getVitesseLineaireAfterTrapeziumFilter(Distance vitesse
         // Alors on ajoute à la vitesse une accélération négative (jusqu'à la valeur (-vitesse_lineaire_max))
         // Autrement dit, si on avance dans la mauvaise direction on ralenti et si on recule dans la bonne direction alors on recule plus vite
         return vitesse_lineaire_a_atteindre
-               + Distance(max(-acceleration_lineaire.getValueInMillimeters(), (-vitesse_lineaire_max.getValueInMillimeters()-vitesse_lineaire_a_atteindre.getValueInMillimeters())));
+               + Distance(max(-acceleration_lineaire, (-vitesse_lineaire_max-vitesse_lineaire_a_atteindre)));
     }
     else
     {
@@ -257,7 +257,7 @@ Distance Asservissement::getVitesseLineaireAfterTrapeziumFilter(Distance vitesse
         // Alors on ajoute à la vitesse une accélération positive (jusqu'à la valeur (vitesse_lineaire_max))
         // Autrement dit, si on recule dans la mauvaise direction on ralenti et si on avance dans la bonne direction alors on avance plus vite
         return vitesse_lineaire_a_atteindre
-               + Distance(min(acceleration_lineaire.getValueInMillimeters(), (vitesse_lineaire_max.getValueInMillimeters()-vitesse_lineaire_a_atteindre.getValueInMillimeters())));
+               + Distance(min(acceleration_lineaire, (vitesse_lineaire_max-vitesse_lineaire_a_atteindre)));
     }
 }
 
diff --git a/src/distance.cpp b/src/distance.cpp
index c5ca609a..aa9ca49c 100755
--- a/src/distance.cpp
+++ b/src/distance.cpp
@@ -2,75 +2,8 @@
 #include <math.h>
 
 
-/*Toutes les paramètres doivent être donnés en centimètre */
-
-Distance::Distance(){
-    this->value=0;
-}
-
-Distance::Distance(float distance_en_millimetres){
-    this->value=distance_en_millimetres;
-}
-
-Distance Distance::operator+(const Distance &dist){
-    Distance resultat(this->value + dist.value);
-    return resultat;
-}
-
-Distance Distance::operator*(const Distance &dist){
-    Distance resultat(this->value * dist.value);
-    return resultat;
-}
-
-Distance Distance::operator*(float dist){
-    Distance resultat(this->value * dist);
-    return resultat;
-}
-
-Distance Distance::operator-(const Distance &dist){
-    Distance resultat(this->value - dist.value);
-    return resultat;
-}
-
-Distance Distance::operator-() const
+bool presqueEgales(Distance d1, Distance d2)
 {
-    return Distance(-value);
+    return (fabs(d1 - d2) < /*0.44*/10);
 }
 
-Distance Distance::operator=(const Distance &dist){
-    this->value=dist.value;
-
-    return *this;
-}
-
-Distance Distance::operator+=(const Distance &dist){
-    this->value += dist.value;
-    return *this;
-}
-
-Distance Distance::operator-=(const Distance &dist){
-    this->value -= dist.value;
-    return *this;
-}
-
-bool Distance::presqueEgales(const Distance &d){
-    if(fabs(this->value - d.value) < /*0.44*/10)
-        return true;
-    return false;
-}
-
-bool Distance::operator>(const Distance &dist){
-    return this->value > dist.value;
-}
-
-bool Distance::operator<(const Distance &dist){
-    return this->value < dist.value;
-}
-
-bool Distance::operator==(const Distance &d){
-    return (this->value == d.value);
-}
-
-float Distance::getValueInMillimeters() const {
-    return value;
-}
diff --git a/src/pid_filter_distance.cpp b/src/pid_filter_distance.cpp
index 5ef9377d..754b1872 100755
--- a/src/pid_filter_distance.cpp
+++ b/src/pid_filter_distance.cpp
@@ -16,7 +16,7 @@ float PIDFilterDistance::getFilteredValue(Distance erreur){
     Distance integrale = sommeErreurs;
     Distance derivee = erreur - erreurPrecedente;
     erreurPrecedente=erreur;
-    return proportionnel.getValueInMillimeters()*Kp
-         + integrale.getValueInMillimeters()*Ki
-         + derivee.getValueInMillimeters()*Kd;
+    return proportionnel*Kp
+         + integrale*Ki
+         + derivee*Kd;
 }
diff --git a/src/simul/element.cpp b/src/simul/element.cpp
index bc693b2b..e5f71f01 100644
--- a/src/simul/element.cpp
+++ b/src/simul/element.cpp
@@ -7,7 +7,7 @@ Element::Element(b2World & world, Position p, Type t)
 
 	b2BodyDef bodyDef;
 	bodyDef.type = b2_dynamicBody;
-	bodyDef.position.Set(p.x.getValueInMillimeters()/100., p.y.getValueInMillimeters()/100.);
+	bodyDef.position.Set(p.x/100., p.y/100.);
 	
 	body = world.CreateBody(&bodyDef);
 
diff --git a/src/simul/robot.cpp b/src/simul/robot.cpp
index 51382abb..5b094833 100644
--- a/src/simul/robot.cpp
+++ b/src/simul/robot.cpp
@@ -61,7 +61,7 @@ Robot::Robot(b2World & world) : olds(10000)
 
 	b2BodyDef bodyDef;
 	bodyDef.type = b2_dynamicBody;
-	bodyDef.position.Set(pos.position.x.getValueInMillimeters()/100., pos.position.y.getValueInMillimeters()/100.);
+	bodyDef.position.Set(pos.position.x/100., pos.position.y/100.);
 	bodyDef.angle = pos.angle.getValueInRadian();
 	
 	body = world.CreateBody(&bodyDef);
@@ -82,12 +82,12 @@ void Robot::updateForces(int dt)
 		return;
 
 	Position impulse;
-	impulse.x = (deriv.position.x*cos(pos.angle.getValueInRadian()) - deriv.position.y*sin(pos.angle.getValueInRadian()));
-	impulse.y = (deriv.position.x*sin(pos.angle.getValueInRadian()) + deriv.position.y*cos(pos.angle.getValueInRadian()));
+	impulse.x = (deriv.position.x*(float)cos(pos.angle.getValueInRadian()) - deriv.position.y*(float)sin(pos.angle.getValueInRadian()));
+	impulse.y = (deriv.position.x*(float)sin(pos.angle.getValueInRadian()) + deriv.position.y*(float)cos(pos.angle.getValueInRadian()));
 
 	float32 rdt = 1000./(float)dt;
 
-	b2Vec2 bvelocity = 0.01*rdt*b2Vec2(impulse.x.getValueInMillimeters(),impulse.y.getValueInMillimeters());
+	b2Vec2 bvelocity = 0.01*rdt*b2Vec2(impulse.x,impulse.y);
 	float bangular = deriv.angle.getValueInRadian()*rdt;
 	//body->ApplyForce(10*body->GetMass()*(bimpulse - body->GetLinearVelocity()), body->GetWorldCenter());
 	//body->ApplyTorque((bangular - body->GetAngularVelocity())*body->GetInertia());
@@ -118,7 +118,7 @@ void Robot::paint(QPainter &p, int dt)
 		if(manual)
 		{
 			keyPressEvent(NULL,false);
-			deriv.position.x = deriv.position.x* 0.97;
+			deriv.position.x = deriv.position.x* 0.97f;
 			deriv.angle = deriv.angle * 0.9;
 		}
 		else
@@ -130,7 +130,7 @@ void Robot::paint(QPainter &p, int dt)
 		}
 	}
 
-	p.setWorldTransform(QTransform().translate(pos.position.x.getValueInMillimeters(),pos.position.y.getValueInMillimeters()).rotateRadians(pos.angle.getValueInRadian()));
+	p.setWorldTransform(QTransform().translate(pos.position.x,pos.position.y).rotateRadians(pos.angle.getValueInRadian()));
 
 
 	p.setPen(QColor(Qt::black));
@@ -140,14 +140,14 @@ void Robot::paint(QPainter &p, int dt)
 	p.setOpacity(1);
 
 	p.setPen(QColor(Qt::red));
-	p.drawLine(0,0,pos.position.x.getValueInMillimeters(),0);
+	p.drawLine(0,0,pos.position.x,0);
 	p.drawLine(0,100*pos.angle.getValueInRadian(),0,0);
 	p.setWorldTransform(QTransform());
 
 
 	p.setPen(QColor(Qt::green));
 	for(unsigned int i=0; i+1 < olds.size(); i++)
-		p.drawLine(olds[i].position.x.getValueInMillimeters(), olds[i].position.y.getValueInMillimeters(), olds[i+1].position.x.getValueInMillimeters(), olds[i+1].position.y.getValueInMillimeters());	
+		p.drawLine(olds[i].position.x, olds[i].position.y, olds[i+1].position.x, olds[i+1].position.y);	
 }
 
 #define IF_KEYSWITCH(n,a) \
-- 
GitLab