boost::geometry::strategy::area::huiller
area_huiller.hpp
boost::geometry::strategy::area::huiller::excess_sum
typename PointOfSegment
typename CalculationType void
boost::mpl::if_c< boost::is_void< CalculationType >::type::value, typename select_most_precise< typename coordinate_type< PointOfSegment >::type, double >::type, CalculationType >::type typedef boost::mpl::if_c< boost::is_void<CalculationType>::type::value, typename select_most_precise < typename coordinate_type<PointOfSegment>::type, double >::type, CalculationType >::type boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::calculation_type calculation_type
calculation_type typedef calculation_type boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::return_type return_type
PointOfSegment typedef PointOfSegment boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::segment_point_type segment_point_type
excess_sum typedef excess_sum boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::state_type state_type
calculation_type calculation_type boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::m_radius m_radius

Radius of the sphere.

void void boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::apply (PointOfSegment const &p1, PointOfSegment const &p2, excess_sum &state) const apply PointOfSegment const & p1 PointOfSegment const & p2 excess_sum & state
boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::huiller
(calculation_type radius=1.0)
huiller
calculation_type radius 1.0
return_type return_type boost::geometry::strategy::area::huiller< PointOfSegment, CalculationType >::result (excess_sum const &state) const result excess_sum const & state

Area calculation by spherical excess / Huiller's formula.

PointOfSegment

point type of segments of rings/polygons

CalculationType

numeric type for calculation (e.g. high precision); if [*void] then it is extracted automatically from the coordinate type and (if necessary) promoted to floating point

Barend Gehrels. Adapted from:

- http://webdocs.cs.ualberta.ca/~graphics/books/GraphicsGems/gemsiv/sph_poly.c

- http://tog.acm.org/resources/GraphicsGems/gemsiv/sph_poly.c

- http://williams.best.vwh.net/avform.htm

The version in Graphics Gems IV (page 132-137) didn't account for polygons crossing the 0 and 180 meridians. The fix for this algorithm can be found in Graphics Gems V (pages 45-46). See:

- http://kysmykseka.net/koti/wizardry/Game%20Development/Programming/Graphics%20Gems%204.pdf

- http://kysmykseka.net/koti/wizardry/Game%20Development/Programming/Graphics%20Gems%205.pdf

This version works for convex and non-convex polygons, for 180 meridian crossing polygons and for polygons with holes. However, some cases (especially 180 meridian cases) must still be checked.

The version which sums angles, which is often seen, doesn't handle non-convex polygons correctly.

The version which sums longitudes, see http://hdl.handle.net/2014/40409, is simple and works well in most cases but not in 180 meridian crossing cases. This probably could be solved.

This version is made for spherical equatorial coordinate systems

[heading Example] [area_with_strategy] [area_with_strategy_output] [heading See also] [link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)]
- boost::geometry::strategy::area::huiller
  apply
- boost::geometry::strategy::area::huiller
  calculation_type
- boost::geometry::strategy::area::huiller
  huiller
- boost::geometry::strategy::area::huiller
  m_radius
- boost::geometry::strategy::area::huiller
  result
- boost::geometry::strategy::area::huiller
  return_type
- boost::geometry::strategy::area::huiller
  segment_point_type
- boost::geometry::strategy::area::huiller
  state_type