#pragma once #include #include #include namespace mbgl { // contains minX, minY, maxX, maxY template using GeometryBBox = std::array; const GeometryBBox DefaultWithinBBox = std::array{{std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::min(), std::numeric_limits::min()}}; const GeometryBBox DefaultDistanceBBox = std::array{{std::numeric_limits::infinity(), std::numeric_limits::infinity(), -std::numeric_limits::infinity(), -std::numeric_limits::infinity()}}; template void updateBBox(GeometryBBox& bbox, const Point& p); // check if bbox1 is within bbox2 template bool boxWithinBox(const GeometryBBox& bbox1, const GeometryBBox& bbox2); template bool segmentIntersectSegment(const Point& a, const Point& b, const Point& c, const Point& d); template bool rayIntersect(const Point& p, const Point& p1, const Point& p2); template bool pointOnBoundary(const Point& p, const Point& p1, const Point& p2); template bool lineIntersectPolygon(const Point& p1, const Point& p2, const Polygon& polygon); template bool pointWithinPolygon(const Point& point, const Polygon& polygon, bool trueOnBoundary = false); template bool pointWithinPolygons(const Point& point, const MultiPolygon& polygons, bool trueOnBoundary = false); template bool lineStringWithinPolygon(const LineString& line, const Polygon& polygon); template bool lineStringWithinPolygons(const LineString& line, const MultiPolygon& polygons); } // namespace mbgl