| Home | Libraries | People | FAQ | More

##### convex_hull (with strategy)

Calculates the convex hull of a geometry using the specified strategy.

###### Description

The free function convex_hull calculates the convex hull of a geometry using the specified strategy.

###### Synopsis

    template<typename Geometry, typename OutputGeometry, typename Strategy>
    void convex_hull(Geometry const & geometry, OutputGeometry & out, Strategy const & strategy)

###### Parameters

Type | Concept | Name | Description
--- | --- | --- | ---
Geometry const & | the input geometry type | geometry | A model of the specified concept, input geometry
OutputGeometry & | the output geometry type | out | A model of the specified concept which is set to the convex hull
Strategy const & | the strategy type | strategy | The strategy which will be used for area calculations

###### Header

Either

`#include <boost/geometry.hpp>`

Or

`#include <boost/geometry/algorithms/convex_hull.hpp>`

###### Conformance

The function convex_hull implements function ConvexHull() from the OGC Simple Feature Specification.

###### Supported geometries

Geometry | Status
--- | ---
Point |
Segment |
Box |
Linestring |
Ring |
Polygon |
MultiPoint |
MultiLinestring |
MultiPolygon |

###### Complexity

Linearithmic

###### Example

Shows how to generate the convex_hull of a geometry

    #include <iostream>

    #include <boost/geometry.hpp>
    #include <boost/geometry/geometries/polygon.hpp>
    #include <boost/geometry/geometries/adapted/boost_tuple.hpp>

    BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)

    int main()
    {
        using point = boost::tuple<double, double>;
        using polygon = boost::geometry::model::polygon<point>;

        polygon poly;
        boost::geometry::read_wkt("polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0"
            ", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))", poly);

        polygon hull;
        boost::geometry::convex_hull(poly, hull);

        using boost::geometry::dsv;
        std::cout
            << "polygon: " << dsv(poly) << std::endl
            << "hull: " << dsv(hull) << std::endl
            ;

        return 0;
    }

Output:

    polygon: (((2, 1.3), (2.4, 1.7), (2.8, 1.8), (3.4, 1.2), (3.7, 1.6), (3.4, 2), (4.1, 3), (5.3, 2.6), (5.4, 1.2), (4.9, 0.8), (2.9, 0.7), (2, 1.3)))
    hull: (((2, 1.3), (2.4, 1.7), (4.1, 3), (5.3, 2.6), (5.4, 1.2), (4.9, 0.8), (2.9, 0.7), (2, 1.3)))