make.hpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Boost.Geometry
  2. // Copyright (c) 2019 Barend Gehrels, Amsterdam, the Netherlands.
  3. // Use, modification and distribution is subject to the Boost Software License,
  4. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt)
  6. #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_MAKE_MAKE_HPP
  7. #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MAKE_MAKE_HPP
  8. #include <boost/geometry/geometries/infinite_line.hpp>
  9. #include <boost/geometry/core/access.hpp>
  10. namespace boost { namespace geometry
  11. {
  12. #ifndef DOXYGEN_NO_DETAIL
  13. namespace detail { namespace make
  14. {
  15. template <typename Type, typename Coordinate>
  16. inline
  17. model::infinite_line<Type> make_infinite_line(Coordinate const& x1,
  18. Coordinate const& y1, Coordinate const& x2, Coordinate const& y2)
  19. {
  20. model::infinite_line<Type> result;
  21. result.a = y1 - y2;
  22. result.b = x2 - x1;
  23. result.c = -result.a * x1 - result.b * y1;
  24. return result;
  25. }
  26. template <typename Type, typename Point>
  27. inline
  28. model::infinite_line<Type> make_infinite_line(Point const& a, Point const& b)
  29. {
  30. return make_infinite_line<Type>(geometry::get<0>(a), geometry::get<1>(a),
  31. geometry::get<0>(b), geometry::get<1>(b));
  32. }
  33. template <typename Type, typename Segment>
  34. inline
  35. model::infinite_line<Type> make_infinite_line(Segment const& segment)
  36. {
  37. return make_infinite_line<Type>(geometry::get<0, 0>(segment),
  38. geometry::get<0, 1>(segment),
  39. geometry::get<1, 0>(segment),
  40. geometry::get<1, 1>(segment));
  41. }
  42. }} // namespace detail::make
  43. #endif // DOXYGEN_NO_DETAIL
  44. }} // namespace boost::geometry
  45. #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MAKE_MAKE_HPP