summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/space.h
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/ovision/space.h')
-rw-r--r--2004/i/nono/src/ovision/space.h121
1 files changed, 35 insertions, 86 deletions
diff --git a/2004/i/nono/src/ovision/space.h b/2004/i/nono/src/ovision/space.h
index 30f69b6..a10a913 100644
--- a/2004/i/nono/src/ovision/space.h
+++ b/2004/i/nono/src/ovision/space.h
@@ -6,116 +6,65 @@
#include <vector>
#include <iostream>
-#include "date/date.h"
-#include "motor/motor.h"
-
-#define TAILLE_MAX 1000
#define POS_ROBOT_ETALONNOGE_X 300
#include "group.h"
-struct TABLOC {
- unsigned int height;
- unsigned int surface;
- unsigned int locImageX;
- unsigned int locImageY;
- unsigned int distance;
- unsigned int angle;
-};
-
-/// Classe Vec simplifiant l'utilisation de vecteur 2D
-class Vec
+struct SETUP_POINT
{
- public:
- /// Coordonnees du vecteur
- float x;
- float y;
-
- /// Constructeurs
- Vec(void);
- Vec(float x1, float y1, float x2, float y2);
- Vec(float x, float y);
-
- /// Operateur +
- inline Vec operator+(Vec v)
- {return Vec(x + v.x, y + v.y);}
-
+ int x, y;
+ int distx, disty;
};
-/// Constructeur
-inline Vec::Vec(void)
-{
-}
-
-/// Constructeur avec initialisation des coordonnees
-/// @param vx coordonnees du vecteur
-/// @param vy coordonnees du vecteur
-inline Vec::Vec(float vx, float vy)
-{
- x = vx;
- y = vy;
-}
-
-
-/// Constructeur avec calcul des coordonnees suivant des points
-/// @param x1 Premier point du vecteur
-/// @param y1 Premier point du vecteur
-/// @param x2 Deuxieme point du vecteur
-/// @param y2 Deuxieme point du vecteur
-inline Vec::Vec(float x1, float y1, float x2, float y2)
-{
- x = x2 - x1;
- y = y2 - y1;
-}
-
/// Etalonnage des distances et localisation de la balle
class Space
{
/// tableau d'index des distances
- uint *indexTabX;
- uint *indexTabY;
-
+ uint *tabX;
+ uint *tabY;
+
/// liste des distances etalonnees
- std::vector<TABLOC> tabLocX;
- std::vector<TABLOC> tabLocY;
-
- /// hauteur de l'image
- uint imgHeight;
+ std::vector<SETUP_POINT> setupTab;
- /// largeur de l'image
- uint imgWidth;
-
-
- public:
+ /// hautdddeur de l'image
+ int imgHeight;
- /// Permet d'ajouter une distance pour l'etalonnage
- void SetDist(ZONE zone, unsigned int distance);
+ /// largeur de l'image
+ int imgWidth;
- /// Renvoie la distane en fonction du pixel donne
- unsigned int GetDistX(unsigned int locImageX, unsigned int locImageY);
- unsigned int GetDistY(unsigned int locImageY);
+ /// coeff pour l'approximation de la profondeur
+ double aY, bY, cY;
- /// Affiche la liste des distance etalonnees
- void ShowTab();
+ /// coeff pour l'approximation de l'horizontal
+ double aX, bX;
- /// Cree la liste des distances etalonnees a partir d'image
- void DoDistTab();
+ public:
- /// Cree le tableau d'index a partir de la liste
- void DoIndexTab();
-
- /// Donne la position reelle sur la table de la balle
- void GetPos(Vec *vOrig, Vec *vDir, float angle);
-
// Constructeur
- Space (uint imgWidth, uint imgHeight);
-
+ Space (int width, int height);
+
// Destructeur
~Space ();
-
+
+ /// Affiche les tables de correspondances de distances
+ void ShowTab ();
+
+ /// Position d'un objet dans le referentiel du robot
+ void GetLoc(int locImgX, int locImgY, int &locX, int &locY);
+
+ /// Ajoute un point pour l'etalonnage
+ void AddSetupPoint(int x, int y, int distx, int disty);
+
+ /// Etalonnage des distances
+ int Setup();
protected:
+ /// Calcul du determinant
+ int Determinant(int matrix[][4]);
+
+ /// Calcul du determinant caracteristique
+ int CaracteristicDeterminant(int matrix[][4], int numRow);
};
#endif // space_h