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

Boost Polygon Library: Polygon Concept

Boost , ,


Polygon Concept

Тег концепта полигона —polygon_concept

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

template<>
struct geometry_concept{ typedef polygon_concept type; };

Семантика многоугольника заключается в том, что он может обеспечивать итераторы над точками, которые представляют его вершины.   Допустимо, чтобы последний край пояснялся с первой и последней точкой, равными друг другу, или подразумевался этой осадкой, которая соединила бы первую и последнюю точку.   Изменяемый многоугольник также должен иметь возможность устанавливать свою геометрию на основе диапазона интератора над такими точками.   Std::vector>или std::list>можно сделать моделями полигона_concept, просто предоставив доступ к их итераторам через черты. Библиотечные функции, которые создают многоугольные объекты, требуют, чтобы эти объекты предоставляли конструктор по умолчанию.

Ниже показаны характеристики многоугольника по умолчанию. Специализация этих черт требуется для типов, которые не соответствуют по умолчанию. Обратите внимание, что эти же черты также используются несколькими другими концепциями многоугольника через параметр шаблона SFINE.   Параметр SFINE позволяет библиотеке предоставлять стандартную специализацию, которая работает для любого объекта, который моделирует концепции полигона 90 градусов.

template
struct polygon_traits {};

template
struct polygon_traits  typename gtl_or_4<
   typename geometry_concept::type, polygon_concept>::type,
    gtl_same_type< geometry_concept::type, polygon_concept>::type,
    gtl_same_type< geometry_concept::type, polygon_with_holes_concept>::type,
    gtl_same_type< geometry_concept::type, polygon_with_holes_concept>::type
  >::type>{
     T::coordinate_type coordinate_type;
     T::iterator_type iterator_type;
    type start_points
           type end_points
              ;   ;            &n

template
struct polygon_mutable_traits {
                                           &

Пример кодаcustom_polygon.cppдемонстрирует отображение пользовательского класса полигона в библиотеку polygon_concept

Объект, являющийся модельюполигона_концепции, может рассматриваться как модель любого из его усовершенствований, если он определен во время выполнения в соответствии с ограничением этих понятий.   Эта концепция литья осуществляется черезview_as<>()Функция.

view_as(polygon_object)
view_as(polygon_object)
view_as(polygon_object)

Возвратное значениеview_as<>()может быть передано в любой интерфейс, который ожидает объект концептуального типа, указанного в его параметре шаблона.

Functions

template <typename T>
point_iterator_type begin_points(const T& polygon)
Ожидает модель полигона.   Возвращает начальный итератор по диапазону точек, которые соответствуют вершинам многоугольника.
template <typename T>
point_iterator_type end_points(const T& polygon)
Ожидает модель полигона.   Возвращает конечный итератор по диапазону точек, которые соответствуют вершинам многоугольника.
template <typename T, typename iterator>
void set_points(T& polygon, iterator b, iterator e)
Предполагает модель многоугольника.    Устанавливает многоугольник в точечный диапазон данных [b,e], который соответствует вершинам многоугольника манхэттана.
template <typename T>
unsigned int size(const T& polygon)
Возвращает число краев в многоугольнике.
template <typename T1, typename T2>
T1& assign(T1& left, const T2& right)
Копирует данные с правого объекта, который моделирует полигон, на левый объект, который моделирует полигон.
template <typename T, typename point_type>
bool contains(const T&, const point_type& point,
              bool consider_touch=true)
Учитывая объект, который моделирует полигон, и объект, который моделирует точку, возвращается истинно, если полигон содержит точку.   Если флаг consider_touch является истинным, он вернется истинным, если точка находится вдоль границы многоугольника.   Линейные вершины.
// get the center coordinate
template <typename T, typename point_type>
void center(point_type& p, const T& polygon)
Устанавливает объект, который модели указывают на центральную точку ограничивающей коробки объекта, который моделирует полигон.   Линейные вершины.
template <typename T, typename rectangle_type>
bool extents(rectangle_type& bbox, const T& polygon)
Устанавливает объект, который модели прямоугольник к ограничивающей коробке объекта, который моделирует полигон и возвращается истинным.   Возвращает ложное и оставляет коробку без изменений, если полигон пуст.   Линейные вершины.
template <typename T>
area_type area(const T& polygon)
Возвращает область объекта, моделирующего полигон.   Линейные вершины.
template <typename T>
direction_1d winding(const T& polygon)
Возвращает направление обмотки объекта, который моделирует многоугольник, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.  Сложность зависит от извилистой черты.
template <typename T>
coordinate_distance perimeter(const T& polygon)
Возвращает длину периметра объекта, который моделирует полигон.   Линейные вершины.
template <typename T, typename transform_type>
T& transform(T& polygon, const transform_type&)
Применяет преобразование() на вершинах многоугольника и устанавливает многоугольник на описанный в результате преобразования его вершин.   Линейные вершины.
template <typename T>
T& scale_up(T& polygon, unsigned_area_type factor)
Увеличивает координату объекта, который моделирует полигон по неподписанному фактору.   Линейные вершины.
template <typename T>
T& scale_down(T& polygon, unsigned_area_type factor)
Масштабирует координаты объекта, который моделирует полигон по неподписанному фактору.   Линейные вершины.
template <typename T, scaling_type>
T& scale(T& rectangle, double scaling)
Масштабирует координаты объекта, который моделирует многоугольник по коэффициенту плавающей точки.   Линейные вершины.
template <typename T>
T& move(T& polygon, orientation_2d,
        coordinate_difference displacement)
Добавляет значение смещения для координации, указанной ориентацией_2d вершин объекта, который моделирует многоугольные .  Линейные вершины wrt.
template <typename polygon_type, typename point_type>
polygon_type& convolve(polygon_type& polygon,
                       const point_type& point)
Сводит координатные значения точки с вершинами объекта, моделирующего полигон.   Линейные вершины.

Polygon Data

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

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

Пример кодаpolygon_usage.cppдемонстрирует использование библиотеки предоставленных полигоном типов данных и функций

Members

geometry_type полигон_концепция
coordinate_type Т
iterator_type Итератор над вершинами point_dataвершины полигона
polygon_data() По умолчанию построенмногоугольник.
polygon_data(const polygon_data& that) Копирование конструкции
polygon_data& operator=(const polygon_data& that) Оператор назначения.
template <typename T2> 
polygon_data& operator=(const T2& that) const
Назначение от объекта, являющегося моделью полигона.
iterator_type begin() const Получите начальный итератор над вершинами многоугольника.
iterator_type end() const Получите конечный итератор поверх вершин полигона.
std::size_t size() const Получить количество элементов в последовательности, хранящейся на полигоне, обычно равное числу краев полигона.
template <typename iT> 
void set(iT begin_points, iT end_points)
Устанавливает полигон в диапазон итераторов точек.  
 
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: Polygon Concept раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 13:51:47/0.0052008628845215/0