
I'm trying to use boost::geometry and boost::units together. For some reason boost::geometry doesn't represent the difference of two points as vectors. So, I'm making my own Vector class and defining Vector = Point - Point. The sample program below doesn't compile because I need to tell the units library about the special properties of point subtraction (I think). terry #include <boost/geometry/geometry.hpp> #include <boost/units/systems/si.hpp> #include <boost/units/quantity.hpp> #include <boost/units/io.hpp> #include <iostream> #include <iomanip> using namespace std; using namespace boost; using namespace boost::geometry; using namespace boost::units; typedef point<double, 3, cs::cartesian> Point; class Vector { Point _impl; friend Vector operator-(const Point& lhs, const Point& rhs); explicit Vector(Point p) : _impl(p) { } public: Vector() : _impl(0) { } Vector(double dx, double dy, double dz=0) : _impl(dx, dy, dz) { } friend ostream& operator<<(ostream& os, const Vector& v) { return os << dsv(v._impl); } }; // Vector inline Vector operator-(const Point& lhs, const Point& rhs) { Point tmp(lhs); subtract_point(tmp, rhs); return Vector(tmp); } inline ostream& operator<<(ostream& os, const Point& pt) { return os << dsv(pt); } int main() { Point p1(1, 2, 3); Point p2(4, 5, 6); typedef quantity<si::length, Point> Position; typedef quantity<si::length, Vector> Displacement; Position start( p1 * si::meters); Position finish(p2 * si::meters); Displacement disp(finish - start); cout << "disp=" << disp << endl; return EXIT_SUCCESS; } // main