All Classes Namespaces Files Functions Variables Enumerations Enumerator
libs/range_sensor/convert2d.cpp
Go to the documentation of this file.
00001 
00010 #include "convert2d.h"
00011 #include "RangeSensor.h"
00012 
00013 using namespace std;
00014 
00015 
00025 void qrk::convert2d(vector<qrk::Point<long> >& points,
00026                     const RangeSensor* sensor, const vector<long>& data,
00027                     const Position<long>& offset, int max_length)
00028 {
00029   int min_distance = sensor->minDistance();
00030   int max_distance = (max_length < 0) ? sensor->maxDistance() : max_length;
00031 
00032   double offset_radian = offset.to_rad();
00033 
00034   int index = 0;
00035   for (vector<long>::const_iterator it = data.begin();
00036        it != data.end(); ++it, ++index) {
00037     long distance = *it;
00038     if ((distance <= min_distance) || (distance >= max_distance)) {
00039       continue;
00040     }
00041 
00042     double radian = sensor->index2rad(index) + offset_radian;
00043     int x = static_cast<long>(distance * cos(radian)) + offset.x;
00044     int y = static_cast<long>(distance * sin(radian)) + offset.y;
00045 
00046     points.push_back(Point<long>(x, y));
00047   }
00048 }
00049 
00050 
00051 void qrk::convert2d(vector<qrk::Point<long> >& points,
00052                     const RangeSensor* sensor, const vector<long>& data,
00053                     int max_length)
00054 {
00055   convert2d(points, sensor, data, Position<long>(0, 0, deg(0)), max_length);
00056 }