Alvaro Cassinelli
/
skinGames_forktest
just a test
Fork of scoreLight_Advanced by
classLaserSensingTrajectory.cpp
- Committer:
- mbedalvaro
- Date:
- 2012-03-28
- Revision:
- 0:345b3bc7a0ea
- Child:
- 3:b44ff6de81bd
File content as of revision 0:345b3bc7a0ea:
#include "classLaserSensingTrajectory.h" LaserSensingTrajectory::LaserSensingTrajectory(): lightTouched(false) { } LaserSensingTrajectory::~LaserSensingTrajectory() { // lsdTrajectory.clear(); // there is no need to clear the vector, the destructor of this vector is called by default (and it's NOT a vector of pointers) } void LaserSensingTrajectory::processSensedData() { // Compute max and min intensity on the loop maxI=0; minI=4096; for (int i = 0; i < lsdTrajectory.size(); i++) { float mesI=lsdTrajectory[i].intensity; if (maxI<mesI) maxI=mesI; if (minI>mesI) minI=mesI; } // Compute autoThreshold: if (1.0*maxI/(minI+0.1) > MIN_CONTRAST_RATIO ) { autoThreshold = 1.0 * (maxI-minI) * THRESHOLD_FACTOR + minI; // THRESHOLD_FACTOR = 2/3 or 1/2 is a good value. } else {// ... otherwise, we consider that the saccade is FULL on something white autoThreshold=-1; } // Segment the trajectory (only two levels for the time being, but we can have more - meaning different forces, real or even complex values to have different angle forces...): // NOTE: if using 1 and -1 instead of 1 and 0, we can avoid having to add a "blob internal pressure"! -1 means a force towards the interior, and +1 outwards... // This means that the loop will naturally become inside-out depending on the color of the main surface! (but will mantain its normal size). Much better and elegant solution than the // idea of the blob "constant" internal pressure... lightTouched=false; for (int i = 0; i < lsdTrajectory.size(); i++) { if (lsdTrajectory[i].intensity>autoThreshold) { // this means a WHITE zone: lsdTrajectory[i].lightZone= -1;//1; } else { // something touched: DARK ZONE lsdTrajectory[i].lightZone= 2;//0; lightTouched=true; // (for the whole loop) } } }