Polygon Sponsor |
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) |
Устанавливает полигон в диапазон итераторов точек. |
|