/usr/include/boost/geometry/strategies/cartesian
NameSizeModeActions
area.hpp39580644editdlrm
area_surveyor.hpp12210644editdlrm
azimuth.hpp12120644editdlrm
box_in_box.hpp106140644editdlrm
buffer_end_flat.hpp37570644editdlrm
buffer_end_round.hpp60840644editdlrm
buffer_join_miter.hpp45400644editdlrm
buffer_join_round.hpp62060644editdlrm
buffer_join_round_by_divide.hpp46590644editdlrm
buffer_point_circle.hpp40160644editdlrm
buffer_point_square.hpp36540644editdlrm
buffer_side_straight.hpp45870644editdlrm
centroid_average.hpp28800644editdlrm
centroid_bashein_detmer.hpp85410644editdlrm
centroid_weighted_length.hpp48550644editdlrm
densify.hpp39020644editdlrm
disjoint_box_box.hpp29850644editdlrm
disjoint_segment_box.hpp89650644editdlrm
distance_projected_point.hpp96350644editdlrm
distance_projected_point_ax.hpp98350644editdlrm
distance_pythagoras.hpp76740644editdlrm
distance_pythagoras_box_box.hpp89930644editdlrm
distance_pythagoras_point_box.hpp92300644editdlrm
distance_segment_box.hpp68930644editdlrm
envelope.hpp42990644editdlrm
envelope_box.hpp34790644editdlrm
envelope_multipoint.hpp14420644editdlrm
envelope_point.hpp29630644editdlrm
envelope_segment.hpp24580644editdlrm
expand_box.hpp18680644editdlrm
expand_point.hpp33400644editdlrm
expand_segment.hpp19000644editdlrm
index.hpp69760644editdlrm
intersection.hpp308550644editdlrm
io.hpp18730644editdlrm
line_interpolate.hpp37720644editdlrm
point_in_box.hpp87610644editdlrm
point_in_point.hpp35430644editdlrm
point_in_poly_crossings_multiply.hpp35930644editdlrm
point_in_poly_franklin.hpp34640644editdlrm
point_in_poly_winding.hpp98890644editdlrm
point_order.hpp10240644editdlrm
side_by_triangle.hpp96690644editdlrm
turn_in_ring_winding.hpp74630644editdlrm
Edit: /usr/include/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp (3464B)
// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // This file was modified by Oracle on 2018, 2019. // Modifications copyright (c) 2018, 2019, Oracle and/or its affiliates. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP #include #include #include namespace boost { namespace geometry { namespace strategy { namespace within { /*! \brief Within detection using cross counting \ingroup strategies \tparam Point \tparam_point \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \author adapted from Randolph Franklin algorithm \author Barend and Maarten, 1995 \author Revised for templatized library, Barend Gehrels, 2007 \return true if point is in ring, works for closed rings in both directions \note Does NOT work correctly for point ON border \qbk{ [heading See also] [link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)] } */ template < typename Point_, // for backward compatibility typename PointOfSegment_ = Point_, // for backward compatibility typename CalculationType = void > class franklin { template struct calculation_type : select_calculation_type < Point, PointOfSegment, CalculationType > {}; /*! subclass to keep state */ class crossings { bool crosses; public : friend class franklin; inline crossings() : crosses(false) {} }; public : typedef crossings state_type; template static inline bool apply(Point const& point, PointOfSegment const& seg1, PointOfSegment const& seg2, crossings& state) { typedef typename calculation_type::type calc_t; calc_t const& px = get<0>(point); calc_t const& py = get<1>(point); calc_t const& x1 = get<0>(seg1); calc_t const& y1 = get<1>(seg1); calc_t const& x2 = get<0>(seg2); calc_t const& y2 = get<1>(seg2); if ( ( (y2 <= py && py < y1) || (y1 <= py && py < y2) ) && (px < (x1 - x2) * (py - y2) / (y1 - y2) + x2) ) { state.crosses = ! state.crosses; } return true; } static inline int result(crossings const& state) { return state.crosses ? 1 : -1; } }; }} // namespace strategy::within }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP