snake_geometry.h 1.77 KB
Newer Older
1 2 3
#pragma once
#include <vector>
#include <array>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
4
#include <boost/geometry.hpp>
5 6 7

#include "WGS84toCartesian.hpp"

Valentin Platzgummer's avatar
Valentin Platzgummer committed
8 9
namespace bg = boost::geometry;

Valentin Platzgummer's avatar
Valentin Platzgummer committed
10
namespace snake_geometry {
11

Valentin Platzgummer's avatar
Valentin Platzgummer committed
12
typedef std::array<double, 3>   Point2D;
13 14
typedef std::array<double, 3>   Point3D;
typedef std::array<double, 3>   GeoPoint3D;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
15 16 17 18 19 20 21 22 23
typedef std::array<double, 2>   GeoPoint2D;
typedef std::vector<Point2D>    Point2DList;
typedef std::vector<Point3D>    Point3DList;
typedef std::vector<GeoPoint2D> GeoPoint2DList;
typedef std::vector<GeoPoint3D> GeoPoint3DList;

typedef bg::model::point<double, 2, bg::cs::cartesian>  BoostPoint;
typedef std::vector<BoostPoint>                         BoostPointList;
typedef bg::model::polygon<BoostPoint>                  BoostPolygon;
24 25 26 27 28

typedef struct {
    double width;
    double height;
    double angle;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
29
    BoostPolygon corners;
30 31
}min_bbox_rt;

Valentin Platzgummer's avatar
Valentin Platzgummer committed
32 33 34 35 36 37 38 39 40 41 42
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 &center);
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);
43

Valentin Platzgummer's avatar
Valentin Platzgummer committed
44 45
void toBoost(const Point2D &point, BoostPoint &boost_point);
void toBoost(const Point2DList &point_list, BoostPolygon &boost_polygon);
46

Valentin Platzgummer's avatar
Valentin Platzgummer committed
47 48
void fromBoost(const BoostPoint &boost_point, Point2D &point);
void fromBoost(const BoostPolygon &boost_polygon, Point2DList &point_list);
49
}