https://github.com/skramm/homog2d
使用场景:机器视觉中的位置修正工具
#include "homog2d.hpp"
using namespace h2d;
int main()
{
//Line2d l1(h2d::Point2d(10, 10)); // a line passing through (0,0) and (10,10)
//Line2d l2(h2d::Point2d(0, 10), h2d::Point2d(10, 0)); // a line passing through (0,10) and (10,0)
//auto pt = l1 * l2; // intersection point (5,5)
//Homogr H8(2, 3); // a translation matrix
std::cout << H8.transpose() << std::endl;
//auto pt8 = H8 * pt;
//std::cout << pt8 << std::endl;
//Homogr h0; // unit transformation ("eye" matrix)
//h0.setTranslation(3,4);
//h2d::Point2d pt1(1,2);
//h2d::Point2d pt2 = h0 * pt1; // pt2 is now (4,6)
//h0.init(); // reset to unit transformation
//std::cout << "r2 type=" << getString(pt2.type()) << '\n';
//std::cout << pt2.getX() << "," << getX(pt2) << std::endl;
Homogr H;
H.addTranslation(0, 10);
H.addRotation(0);
//H.addRotation(M_PI / 180.0 * 90);
//std::cout << H << std::endl;
h2d::FRect rectInit = FRect(0, 0, 10, 10);
auto shapeTemp = H * rectInit;
std::cout << shapeTemp << std::endl;
h2d::Point2d point1(20, 10);
h2d::Point2d point3 = H * point1;
std::cout << point3.getX() << "," << getX(point3) << std::endl;
std::cout << point3.get()[0] << "," <<point3.get()[1] << std::endl;
Homogr Hold = H;
h2d::Point2d point0 = H.inverse() * point1;
h2d::Point2d point2 = Hold * point0;
std::cout << point0 << std::endl<< point2 << std::endl;
return 0;
}