Chris@102: // Boost.Geometry Chris@102: Chris@102: // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. Chris@102: Chris@102: // This file was modified by Oracle on 2014. Chris@102: // Modifications copyright (c) 2014 Oracle and/or its affiliates. Chris@102: Chris@102: // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle Chris@102: Chris@102: // Use, modification and distribution is subject to the Boost Software License, Chris@102: // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@102: // http://www.boost.org/LICENSE_1_0.txt) Chris@102: Chris@102: #ifndef BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_SIDE_BY_AZIMUTH_HPP Chris@102: #define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_SIDE_BY_AZIMUTH_HPP Chris@102: Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: Chris@102: #include Chris@102: Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: Chris@102: #include Chris@102: //#include Chris@102: Chris@102: Chris@102: namespace boost { namespace geometry Chris@102: { Chris@102: Chris@102: Chris@102: namespace strategy { namespace side Chris@102: { Chris@102: Chris@102: /*! Chris@102: \brief Check at which side of a segment a point lies Chris@102: left of segment (> 0), right of segment (< 0), on segment (0) Chris@102: \ingroup strategies Chris@102: \tparam Model Reference model of coordinate system. Chris@102: \tparam CalculationType \tparam_calculation Chris@102: */ Chris@102: template Chris@102: class side_by_azimuth Chris@102: { Chris@102: public: Chris@102: side_by_azimuth(Model const& model = Model()) Chris@102: : m_model(model) Chris@102: {} Chris@102: Chris@102: template Chris@102: inline int apply(P1 const& p1, P2 const& p2, P const& p) Chris@102: { Chris@102: typedef typename promote_floating_point Chris@102: < Chris@102: typename select_calculation_type_alt Chris@102: < Chris@102: CalculationType, Chris@102: P1, P2, P Chris@102: >::type Chris@102: >::type calc_t; Chris@102: Chris@102: calc_t d1 = 0.001; Chris@102: calc_t crs_AD = geometry::detail::azimuth(p1, p, m_model); Chris@102: calc_t crs_AB = geometry::detail::azimuth(p1, p2, m_model); Chris@102: calc_t XTD = asin(sin(d1) * sin(crs_AD - crs_AB)); Chris@102: Chris@102: return math::equals(XTD, 0) ? 0 : XTD < 0 ? 1 : -1; Chris@102: } Chris@102: Chris@102: private: Chris@102: Model m_model; Chris@102: }; Chris@102: Chris@102: }} // namespace strategy::side Chris@102: Chris@102: Chris@102: }} // namespace boost::geometry Chris@102: Chris@102: Chris@102: #endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_SIDE_BY_AZIMUTH_HPP