summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/space.cc
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/ovision/space.cc')
-rw-r--r--2004/i/nono/src/ovision/space.cc55
1 files changed, 26 insertions, 29 deletions
diff --git a/2004/i/nono/src/ovision/space.cc b/2004/i/nono/src/ovision/space.cc
index 34fb2a6..730dea7 100644
--- a/2004/i/nono/src/ovision/space.cc
+++ b/2004/i/nono/src/ovision/space.cc
@@ -7,29 +7,20 @@
#include "space.h"
#include <math.h>
-#include "imgFile.h"
-#include "segmNN.h"
#include "group.h"
using namespace std;
-/*namespace std
-{
-struct less<TABLOC*> {
- bool operator()(TABLOC *loc1, TABLOC *loc2)
- {
- return loc1->locImageY < loc2->locImageY;
- }
-}
-*/
/// Constructeur
/// @param imgHeight hauteur de l'image
/// @param imgWidth largeur de l'image
-Space::Space (int imgHeight, int imgWidth)
+Space::Space (int imgHeight, int imgWidth, OConfig *oconfig)
{
Space::imgHeight = imgHeight;
Space::imgWidth = imgWidth;
+ Space::oconfig = oconfig;
+
aY = bY = cY = 0;
aX = aY = 0;
@@ -53,6 +44,13 @@ void Space::ShowTab()
/// Ajoute un point pour l'etalonnage
void Space::AddSetupPoint(int x, int y, int distx, int disty)
{
+ if (setupTab.size() > 3)
+ {
+ std::vector<SETUP_POINT>::iterator iter;
+ iter = setupTab.begin();
+ setupTab.erase(iter);
+ }
+
SETUP_POINT setupPoint;
setupPoint.x = x;
@@ -64,6 +62,12 @@ void Space::AddSetupPoint(int x, int y, int distx, int disty)
}
+/// Chargement des points a partir d'un fichier
+void Space::LoadFromFile()
+{
+ for (int i=0; i<3; i++)
+ AddSetupPoint(oconfig->tabPoint[i][0], oconfig->tabPoint[i][1], oconfig->tabPoint[i][2], oconfig->tabPoint[i][3]);
+}
int Space::Determinant(int matrix[][4])
{
@@ -117,6 +121,7 @@ int Space::Setup()
aY = (double)Space::CaracteristicDeterminant(matrix, 0) / det;
bY = (double)Space::CaracteristicDeterminant(matrix, 1) / det;
cY = (double)Space::CaracteristicDeterminant(matrix, 2) / det;
+ cout << "aY: " << aY << " bY: " << bY << "cY: " << cY << endl;
}
else
{
@@ -140,9 +145,6 @@ int Space::Setup()
return 1;
}
-
-
-
/// Position d'un objet dans le referentiel du robot
void Space::GetLoc(int locImgX, int locImgY, int &locX, int &locY)
{
@@ -150,21 +152,16 @@ void Space::GetLoc(int locImgX, int locImgY, int &locX, int &locY)
locY = (int)(locImgY*locImgY*aY + locImgY*bY + cY);
}
-
/// Donne la position reelle sur la table de la balle
-/// @param *vOrig position du robot sur la table
-/// @param *vDir position de la balle par rapport au robot
-/// @param angle rotation du robot par rapport a sa position d'origine
-/*void Space::GetPos(Vec *vOrig, Vec *vDir, float angle)
+/// @param locX, locY : position de la balle dans le rĂfĂrentiel du robot
+/// @param posRobotX, posRobotY, angleRobot : position du robot sur la table
+/// @param posX, posY : variable de retour pour la position de la balle sur la table
+void Space::GetPos(int locX, int locY, int posRobotX, int posRobotY, double angleRobot, int &posX, int &posY)
{
- Vec vPos;
- float sinus = sin(angle);
- float cosinus = cos(angle);
-
+ float sinus = sin(angleRobot);
+ float cosinus = cos(angleRobot);
+
// Calcul des coordonnes avec le changement de repere
- vPos.x = vOrig->x + vDir->x*cosinus - vDir->y*sinus;
- vPos.y = vOrig->y + vDir->x*sinus + vDir->y*cosinus;
-
- printf("Position: %f %f\n", vPos.x, vPos.y);
+ posX = (int)(posRobotX + locX*cosinus - locY*sinus);
+ posY = (int)(posRobotY + locX*sinus + locY*cosinus);
}
-*/