Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost Polygon Library: Segment Concept

Boost , ,


Segment Concept

Сегмент_концепцияСегмент_концепция[ORIG_END] -->

Для регистрации определенного пользователем типа в качестве модели концепта сегмента специализируйте метафункцию концепта геометрии для данного типа.   В приведенном ниже примере CSegment зарегистрирован как модель концепции сегмента.

template <>
struct geometry_concept<CSegment> { typedef segment_concept type; };

Семантика сегмента заключается в том, что он имеет низкую и высокую точку.   A std::pair, boost::tupleили boost::array— все эти объекты могут быть сделаны моделями сегмента, просто предоставляя косвенный доступ к их элементам через черты, однако эти объекты не могут быть сделаны моделью как сегмента, так и прямоугольника в одном и том же блоке компиляции, по очевидной причине, что дублирующая специализация структуры геометрии_концепции является незаконной, но также потому, что это сделало бы перегрузку общей функции по концепции неоднозначной, если тип моделируется более чем одной концепцией.

Ниже показаны характеристики сегмента по умолчанию. Специализация этих черт необходима для типов, которые не соответствуют по умолчанию.

шаблон
структурный сегмент_traits {
  typedef typename Сегмент::coordinate_type coordinate_type
  typedef typename Сегмент: point_type point_type

  статическая inline point_type get(const Segment& segment, direction_1d dir) {
    return segment.get(dir);
  }
};

template
struct segment_mutable_traits {
 
Типовое имя segment_traits< Сегмент>::coordinate_typeкоординатный_тип;
  typedef typename segment_traits::point_type point_type;

  статическое inline void set(Segment& segment, direction_1d dir, const point_type& point) {
    segment.set(dir, p);
  }


    статическое inline Segment construct(const point_type& low, const point_type& high) {
    Return Segment(low, high);
  }
 

Functions

template <typename Segment>
point_type get(const Segment& segment, direction_1d dir)
Возвращает низкую или высокую конечную точку объекта, который моделирует сегмент, в зависимости от направления _1d. 
template <typename Segment, typename Point>
void set(
Segment& segment, direction_1d dir,
         const Point&
point)
Устанавливает низкую или высокую конечную точку объекта, который моделирует сегмент, на объект, который моделирует точку, в зависимости от значения направления_1d.
template <typename Segment, typename Point1, typename Point2>
Segment construct(const Point1& low, const Point2& high)
Конструирует объект, который является моделью сегмента, учитывая два объекта, которые являются моделями точки.
шаблонSegment2>
Segment1copy_construct(constSegment2& segment]
Copy constructs an object that models segment given another segment.
template <typename Segment1, typename Segment2>
Segment1& assign(Segment1& segment1,
                 const
Segment2& segment2)
Копиирует данные со второго объекта, который моделирует сегмент, на первый объект, который моделирует сегмент.
template <typename Segment1, typename Segment1>
bool equivalence(const
Segment1& segment1,
                 const
Segment1& segment2)
Учитывая два объекта, которые моделируют сегмент, сравнивают и возвращают истинное, если их низкие и высокие значения соответственно равны.
шаблон
ориентацияСегмент& сегмент
                       const Point& point]
Реализует надежный тест ориентации двух объектов, которые моделируют сегмент и точку. Возвращается 0, если точка коллинеарна к сегменту.
Возвращается 1, если точка лежит слева от сегмента.
Возвращается -1, если точка лежит справа от сегмента.
шаблон
intориентация(const& segment1,
                   const Segment2& segment2)
Внедряет надежный тест ориентации двух объектов, которые моделируют сегмент. Примечание: сегменты рассматриваются как математика. векторов.
Возвращается 0, если сегменты коллинеарны.
Возвращает 1, если второй сегмент ориентирован на первый сегмент.
Возвращает -1, если второй сегмент ориентирован на первый сегмент.
шаблонСегмент, Typename Point>
boolсодержит[constСегмент& сегмент
    const Point& значение,bool consider_touch]
Возвращается истинно, если объект, который моделирует сегмент, содержит объект, который моделирует точку, а не ложный.
шаблон
boolсодержит[constSegment1& segment1,
    constСегмент2& сегмент2,bool consider_touch
Возвращается истинным, если первый объект содержит второй, а другой ложный. Оба объекта модельного сегмента.
template <typename Segment>
point_type low(const Segment& segment)
Возвращает низкую конечную точку объекта, который моделирует сегмент.
template <typename Segment>
point_type high(const Segment& segment)
Возвращает высокую конечную точку объекта, который моделирует сегмент.
template <typename Segment>
point_type center(const Segment& segment)
Возвращает центральную точку объекта, который моделирует сегмент.
template <typename Segment, typename Point>
void low(Segment& segment, const Point& point)
Устанавливает низкую конечную точку объекта, который моделирует сегмент.
template <typename Segment, typename Point>
void high(Segment& segment, const Point& point)
Устанавливает высокую конечную точку объекта, который моделирует сегмент.
шаблонСегмент>
расстояние_типдлина(констСегмент& сегмент]
Возвращает длину объекта, который моделирует сегмент.
template <typename Segment>
Segment& scale_up(Segment& segment,
    unsigned_area_type factor)
Умножает координаты x и y обеих конечных точек объекта, которые моделируют сегмент по неподписанному фактору.
template <typename Segment>
Segment& scale_down(Segment& segment,
    unsigned_area_type factor)
Разделяет координаты x и y обеих конечных точек объекта, которые моделируют сегмент по неподписанному фактору.
template <typename Segment, typename Scale>
Segment& scale(Segment& segment, const Scale& sc)
Называет функцию масштабирования типа масштабирования на низкой и высокой конечной точке объекта, которая моделирует сегмент и обновляет сегмент с помощью масштабируемых конечных точек.
template <typename Segment, typename Transform>
Segment& transform(Segment& segment, const Transform& tr)
Называет функцию трансформатора типа преобразования на низких и высоких конечных точках объекта, который моделирует сегмент и обновляет сегмент с преобразованными конечными точками.
template <typename Segment>
Segment& move(Segment& segment, orientation_2d
    coordinate_difference displacement)
Добавляет значение смещения к координатам x или y обеих конечных точек объекта, которые моделируют сегмент, обозначенный ориентацией_2d.
template <Segment, Point>
Segment& convolve(Segment& segment, const Point& point)
Обе конечные точки объекта, который моделирует сегмент, с объектом, который моделирует точку.
template <Segment, Point>
Segment& deconvolve(Segment& segment, const Point& point)
Развертывание обеих конечных точек объекта, который моделирует сегмент, с объектом, который моделирует точку.
template <typename Segment1, typename Segment2>
bool abuts(const Segment1& segment1,
    const Segment2& segment2, direction_1d dir)
Возвращается истинно, если два объекта, которые моделируют сегмент, но, в зависимости от направления_1d значения.
template <typename Segment1, typename Segment2>
bool abuts(const Segment1& segment1,
           const Segment2& segment2)
Возвращается истинно, если два объекта, которые моделируют сегмент, находятся рядом: либо первый, либо второй, либо наоборот.
templateboolintersects                                        & Возвращается истинно, если два объекта, которые сегмент модели пересекаются, иначе ложно.
template <typename Segment, typename Point>
distance_type euclidean_distance(
    const
Segment& segment, const Point& point)
Возвращает расстояние от объекта, который моделирует сегмент, к объекту, который модели указывают.
template <typename Segment1, typename Segment2>
distance_type euclidean_distance(
    const
Segment1& segment1, const Segment2& segment2)
Возвращает расстояние между двумя объектами, которые моделируют сегмент.

Segment Data

В библиотеке представлена модель концепта сегмента, объявленногоtemplatesegment_data, где T — тип координат.

Этот тип данных используется внутри, когда сегмент необходим и доступен пользователю библиотеки, который считает удобным использовать тип данных сегмента библиотеки вместо предоставления своих собственных.   Тип данных реализован для удобства использования с библиотечными чертами.

Members

geometry_type Сегмент_концепция
coordinate_type T
point_type point_data
segment_data() Конструктор по умолчанию.
segment_data(const point_type& low,
             const point_type& high)
Построение сегмента из заданных конечных точек.
segment_data(const segment_data& that) Копировать конструктор.
segment_data& operator=(const segment_data& that) Оператор назначения.
template <typename SegmentType>
segment_data& operator=(const
SegmentType& that) const
Назначение от объекта, являющегося моделью сегмента.
bool operator==(const segment_data& that) const Перегрузка оператора равенства.
bool operator!=(const segment_data& that) const Перегрузка оператора неравенства.
bool operator<(const segment_data& that) const Меньше перегрузок оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
bool operator<=(const segment_data& that) const Меньшая или равная перегрузка оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
bool operator>(const segment_data& that) const Большая перегрузка оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
bool operator>=(const segment_data& that) const Большая или равная перегрузка оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
point_type get(direction_1d dir) const Получает низкую / высокую конечную точку с учетом значения направления.
point_type low() const Восстанавливает низкую конечную точку.
point_type high() const Получает высокую конечную точку.
void set(direction_1d dir, const point_type& point) Установите конечную точку в заданном направлении.
segment_data& low(const point_type& point) Устанавливает низкую конечную точку.
segment_data& high(const point_type& point) Устанавливает высокую конечную точку.

Segment Utils

Библиотека предоставляет несколько алгоритмов для манипулирования наборов сегментных данных. В частности, общий сегмент линии Алгоритм пересечения, используемый для операций многоугольного набора, подвергается воздействию через несколько интерфейсов, чтобы позволить его использовать с любой коллекцией или последовательность объектов, которые моделируют Сегмент_концепция. .Сегмент_концепция. [ORIG_END] -->

Functions

template <typename SegmentContainer,
          typename SegmentIterator
>
void intersect_segments(
   
SegmentContainer* result,
    SegmentIterator first,
    SegmentIterator last)
Накопляет результат расщепления сегментов в диапазоне итераторов в точках их пересечения в контейнер результата. Предпосылки: тип сегмента, используемый всеми входными структурами, должен моделировать концепцию сегмента. Пост-условия: никакие сегменты не пересекаются, за исключением их конечных точек. Полезно для удовлетворения предварительных условий построения диаграммы вороной. Ожидаемый n log n runtime, худший случай квадратичный runtime wrt. vertices + intersections.
template <typename Segment,
         
typename SegmentIterator>
void intersect_segments(
   
vector<pair<size_t, Segment>* result,
    SegmentIterator first,
    SegmentIterator last)
Накопляет результат расщепления сегментов в диапазоне итераторов в точках их пересечения в контейнер результата. Предпосылки: тип сегмента, используемый всеми входными структурами, должен моделировать концепцию сегмента. Пост-условия: никакие сегменты не пересекаются, за исключением их конечных точек. Индекс входного сегмента сопоставляется с каждым результирующим сегментом, который был разделен для его создания, чтобы связать сегменты результата с входными сегментами. Ожидаемый n log n runtime, худший случай квадратичный runtime wrt. vertices + intersections.
template <typename Rectangle,
         
typename SegmentIterator>
void envelope_segments(
   
Rectangle* rect,
    SegmentIterator first,
    SegmentIterator last
)
Вычисляет ограничивающий прямоугольник диапазона итераторов линейных сегментов. Предпосылки: тип сегмента и тип прямоугольника, используемые входными структурами, должны моделировать концепцию сегмента и концепцию прямоугольника соответственно. Линейное время выполнения.
 
Copyright: Авторское право © Intel Corporation 2008-2010.
License: Distributed under 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)

Статья Boost Polygon Library: Segment Concept раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 11:54:36/0.0098869800567627/0