#pragma once #include #include #include #include "WGS84toCartesian.hpp" namespace bg = boost::geometry; namespace snake_geometry { typedef std::array Point2D; typedef std::array Point3D; typedef std::array GeoPoint3D; typedef std::array GeoPoint2D; typedef std::vector Point2DList; typedef std::vector Point3DList; typedef std::vector GeoPoint2DList; typedef std::vector GeoPoint3DList; typedef bg::model::point BoostPoint; typedef std::vector BoostPointList; typedef bg::model::polygon BoostPolygon; typedef struct { double width; double height; double angle; BoostPolygon corners; }min_bbox_rt; void toENU(const GeoPoint3D &WGS84Reference, const GeoPoint3D &WGS84Position, Point3D &ENUPosition); void fromENU(const Point3D &WGS84Reference, const Point3D &ENUPosition, GeoPoint3D &WGS84Position); void polygonCenter(const BoostPolygon &polygon, BoostPoint ¢er); void minimalBoundingBox(const BoostPolygon &polygon, min_bbox_rt &minBBox); void offsetPolygon(const BoostPolygon &polygon, BoostPolygon &polygonOffset, double offset); void rotateDeg(const Point2DList &point_list, Point2DList &rotated_point_list, double degree); void rotateRad(const Point2DList &point_list, Point2DList &rotated_point_list, double rad); bool isClockwise(const Point2DList &point_list); void toBoost(const Point2D &point, BoostPoint &boost_point); void toBoost(const Point2DList &point_list, BoostPolygon &boost_polygon); void fromBoost(const BoostPoint &boost_point, Point2D &point); void fromBoost(const BoostPolygon &boost_polygon, Point2DList &point_list); }