Pangolin
Header-only C++20 plane computational geometry library
Loading...
Searching...
No Matches
monotonechain.hpp File Reference
#include "shape/convex.hpp"
#include <algorithm>
#include <vector>
#include <cassert>
#include <compare>
#include <concepts>
#include <cstddef>
#include <functional>
#include <iterator>
#include <limits>
#include <optional>
#include <ostream>
#include <ranges>
#include <span>
#include <type_traits>
#include <utility>
#include <variant>

Go to the source code of this file.

Classes

struct  pgl::MonotoneChain< PointType_, TLabel, Storage >
 Weakly x-monotone polyline stored by lexicographically sorted vertices. More...
class  pgl::MonotoneChain< PointType_, TLabel, Storage >::BoundaryIterator< Oriented >
 Forward iterator over the (optionally oriented) chain edges. More...

Namespaces

namespace  pgl

Typedefs

template<class PointType = Point<>, class Label = NoLabel>
using pgl::MonotoneChainView = MonotoneChain<PointType, Label, std::span<const PointType>>
 A non-owning MonotoneChain that views an external, already canonical (sorted, duplicate-free) contiguous range of vertices.

Functions

 pgl::MonotoneChain () -> MonotoneChain< Point<>, NoLabel >
template<std::ranges::input_range Range>
requires detail::is_point_v<std::ranges::range_value_t<Range>>
 pgl::MonotoneChain (Range &&) -> MonotoneChain< std::remove_cvref_t< std::ranges::range_value_t< Range > >, NoLabel >
template<std::ranges::input_range Range>
requires detail::is_point_v<std::ranges::range_value_t<Range>>
 pgl::MonotoneChain (Range &&, bool) -> MonotoneChain< std::remove_cvref_t< std::ranges::range_value_t< Range > >, NoLabel >
template<class Number>
requires (!detail::is_point_v<Number>)
 pgl::MonotoneChain (std::initializer_list< Number >) -> MonotoneChain< Point< Number >, NoLabel >
template<class Number>
requires (!detail::is_point_v<Number>)
 pgl::MonotoneChain (std::initializer_list< Number >, bool) -> MonotoneChain< Point< Number >, NoLabel >
template<class PointType, class LabelType, class Storage, class TranslationNumber, class TranslationLabel>
constexpr auto pgl::operator- (const MonotoneChain< PointType, LabelType, Storage > &chain, const Point< TranslationNumber, TranslationLabel > &translation)
template<class PointType, class LabelType, class Storage, class Scalar>
requires (!detail::is_point_v<Scalar> && !TransformationConcept<Scalar>)
constexpr auto pgl::operator* (const MonotoneChain< PointType, LabelType, Storage > &chain, const Scalar &scalar)
template<class Scalar, class PointType, class LabelType, class Storage>
requires (!detail::is_point_v<Scalar> && !TransformationConcept<Scalar>)
constexpr auto pgl::operator* (const Scalar &scalar, const MonotoneChain< PointType, LabelType, Storage > &chain)
template<class PointType, class LabelType, class Storage, class Scalar>
requires (!detail::is_point_v<Scalar> && !TransformationConcept<Scalar>)
constexpr auto pgl::operator/ (const MonotoneChain< PointType, LabelType, Storage > &chain, const Scalar &scalar)
template<class PointType, class LabelType, class Storage>
std::ostream & pgl::operator<< (std::ostream &stream, const MonotoneChain< PointType, LabelType, Storage > &chain)
 Streams a MonotoneChain as MonotoneChain[(P1),(P2),(P3),...].