Program Listing for File point2d.hpp
↰ Return to documentation for file (include/tuw_geometry/point2d.hpp
)
#ifndef TUW_GEOMETRY__POINT2D_HPP
#define TUW_GEOMETRY__POINT2D_HPP
#include <memory>
#include <opencv2/core/core.hpp>
#include <tuw_geometry/utils.hpp>
namespace tuw
{
class Point2D;
class Polar2D;
using Point2DPtr = std::shared_ptr<Point2D>;
using Point2DConstPtr = std::shared_ptr<Point2D const>;
class Point2D : public cv::Vec<double, 3>
{
public:
Point2D();
Point2D(const cv::Point & p);
Point2D(double x, double y);
Point2D(double x, double y, double h);
Point2D(const Polar2D & p);
template<typename T>
Point2D(const cv::Vec<T, 3> & p)
: cv::Vec<double, 3>(p)
{
}
template<typename T>
Point2D(const cv::Vec<T, 2> & p)
: cv::Vec<double, 3>(p)
{
}
template<typename T>
Point2D(const cv::Point_<T> & p)
: cv::Vec<double, 3>(p.x, p.y, 1.)
{
}
Point2D & set(const Point2D & p);
Point2D & set(double x, double y);
Point2D & set(double x, double y, double h);
const double & x() const;
double & x();
const double & y() const;
double & y();
const double & h() const;
double & h();
void set_x(double v);
double get_x() const;
void set_y(double v);
double get_y() const;
void set_h(double v);
double get_h() const;
double angle() const;
double radius() const;
cv::Vec<double, 2> vector() const;
double distanceTo(const Point2D & p) const;
const cv::Point_<double> & cv() const;
cv::Point_<double> & cv();
bool inside(double x0, double y0, double x1, double y1) const;
friend std::ostream & operator<<(std::ostream & os, const Point2D & o)
{
os << "[" << o.x() << ", " << o.y() << "]";
return os;
}
std::string str(const char * format = "[%6.4lf, %6.4lf, %6.5lf]") const;
bool equal(const Point2D & o, double tolerance = 0.0001) const;
};
using Points2D = std::vector<Point2D>;
using Points2DPtr = std::shared_ptr<Points2D>;
using Points2DConstPtr = std::shared_ptr<Points2D const>;
} // namespace tuw
namespace cv
{
template<typename _Tp>
static inline tuw::Point2D operator*(const Matx<_Tp, 3, 3> & a, const tuw::Point2D & b)
{
Matx<_Tp, 3, 1> c(a, b, Matx_MatMulOp());
return reinterpret_cast<const tuw::Point2D &>(c);
}
} // namespace cv
#endif //TUW_GEOMETRY__POINT2D_HPP