summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/space.h
blob: 30f69b69948238d9852ea1af1f50cd19b9ffc367 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#ifndef space_h
#define space_h
// space.h - Space class
// nono - Programme du robot Efrei Robotique I1-I2 2004
// Copyright (C) 2004 Olivier Gaillard

#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
{
  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);}
	
};

/// 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;
    
    /// liste des distances etalonnees
    std::vector<TABLOC> tabLocX; 
    std::vector<TABLOC> tabLocY; 
    
    /// hauteur de l'image
    uint imgHeight; 

    /// largeur de l'image
    uint imgWidth; 
      
    
  public:

    /// Permet d'ajouter une distance pour l'etalonnage
    void SetDist(ZONE zone, unsigned int distance);

    /// Renvoie la distane en fonction du pixel donne
    unsigned int GetDistX(unsigned int locImageX, unsigned int locImageY);
    unsigned int GetDistY(unsigned int locImageY);

    /// Affiche la liste des distance etalonnees
    void ShowTab();

    /// Cree la liste des distances etalonnees a partir d'image 
    void DoDistTab();

    /// 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);
    
    // Destructeur
    ~Space ();
    
  protected:
};

#endif // space_h