28 #ifndef _MLAB_CURVE_H_ 29 #define _MLAB_CURVE_H_ 36 namespace mira {
namespace localization {
40 class Curve :
public std::vector<Point2f>
52 template<
typename Reflector>
66 float coverage = 0.0f,
size_t skip = 4,
const Pose2& tf =
Pose2(0, 0, 0));
80 const Eigen::Matrix2f R = pose.r.toRotationMatrix();
81 const Eigen::Vector2f& t = pose.t;
83 for(
size_t i = 0; i < size(); ++i)
93 return (p - c).norm();
101 float min_sqdist = std::numeric_limits<float>::max();
103 for (
size_t i = 0; i < size(); i += skip)
105 const float sqd = (operator[](i) - p).squaredNorm();
106 if (sqd < min_sqdist) {
116 float coverage,
size_t skip,
const Pose2& tf)
119 return std::numeric_limits<double>::max();
121 const float maxDistSq = maxDist * maxDist;
122 const bool applyTf = !(tf.t.isZero() && isApprox<float, float>(tf.phi(), 0.0f, std::numeric_limits<float>::epsilon()));
123 const Eigen::Matrix2f tfR = tf.r.toRotationMatrix();
124 const Eigen::Vector2f& tfT = tf.t;
128 for (
size_t i = 0; i < size(); i += skip)
130 const Point2f xt(applyTf ? (tfR * at(i) + tfT) : at(i));
133 const float d = (xt - y).squaredNorm();
143 if (count < static_cast<size_t>(((size() / skip) * coverage)))
144 return std::numeric_limits<double>::max();
146 return (error / static_cast<float>(count));
151 for (
size_t i = 0; i < size(); i++)
154 int x = x0 + (int) (scale * point.x() + 0.5);
155 int y = y0 - (int) (scale * point.y() + 0.5);
float distToPoint(const Point2f &p) const
Definition: Curve.h:90
Curve(const Curve &c)
Definition: Curve.h:48
#define MIRA_REFLECT_BASE(reflector, BaseClass)
double matchWithCurve(const Curve &c, float maxDist=std::numeric_limits< float >::max(), float coverage=0.0f, size_t skip=4, const Pose2 &tf=Pose2(0, 0, 0))
Definition: Curve.h:115
void transform(const Pose2 &pose)
Definition: Curve.h:78
#define MIRA_THROW(ex, msg)
void draw(Img8U3 &img, Color::RGB col, float scale, int x0, int y0) const
Definition: Curve.h:149
size_t closestPoint(const Point2f &p, size_t skip=4) const
Definition: Curve.h:96
void reflect(Reflector &r)
Definition: Curve.h:53
void merge(const Curve &c)
Definition: Curve.h:70
Curve()
Definition: Curve.h:44