Polygon Sponsor |
Polygon 90 Concept Тег концепта polygon_90 polygon_90_concept Для регистрации определенного пользователем типа в качестве модели концепции polygon_90 , специализируйте метафункцию геометрии для этого типа. В приведенном ниже примере CPolygon90 зарегистрирован как модель полигона_90 концепции. template <> struct geometry_concept { typedef polygon_90_concept type; }; Семантика многоугольника 90 заключается в том, что он может обеспечивать итераторы по координатам x и y, которые соответствуют его горизонтальным и вертикальным сторонам, начиная с координаты x. Изменяемый многоугольник 90 также должен иметь возможность устанавливать свою геометрию на основе диапазона интератора по таким координатам. Поскольку большинство полигонов используют вершинные точки во внутренних адаптерах итератора хранения для преобразования в и из точечных последовательностей, в итераторе_points_to_compact.hpp и итераторе_compact_to_points.hpp для помощи в специализации полигона_90_traits. A std::vector или std::list можно сделать модели полигона_90_concept, просто предоставив доступ к их итераторам через черты. Библиотечные функции, которые создают многоугольные объекты, требуют, чтобы эти объекты предоставляли конструктор по умолчанию. Ниже показаны характеристики многоугольника по умолчанию. Специализация этих черт требуется для типов, которые не соответствуют по умолчанию. Обратите внимание, что эти черты также используются концепцией полигона_90_with_holes. template struct polygon_90_traits { typedef typename T::coordinate_type coordinate_type; typename T::compact_iterator_type compact_iterator_type; compact_iterator_type start_compact (контакт) T&t) { compact_iterator_type end_compact T &n template struct polygon_90_mutable_traits { };[ORIG_END] --> Объект, являющийся моделью полигона_90_концепции, может рассматриваться как модель любого из его уточнений, если он определен во время выполнения в соответствии с ограничением этих понятий. Эта концепция литья осуществляется через функцию view_as<>(). view_as(polygon_90_object) Возвратное значение view_as<>() может быть передано в любой интерфейс, который ожидает объект концептуального типа, указанного в его параметре шаблона. Functions
template
<typename T>
compact_iterator_type begin_compact(const T& polygon) |
Ожидает модель полигона_90. Возвращает начальный итератор по диапазону координат, которые соответствуют горизонтальным и вертикальным краям. |
template
<typename T>
compact_iterator_type end_compact(const T& polygon) |
Ожидает модель полигона_90. Возвращает конечный итератор по диапазону координат, которые соответствуют горизонтальным и вертикальным краям. |
template
<typename T>
point_iterator_type begin_points(const T& polygon) |
Ожидает модель полигона_90. Возвращает начальный итератор в диапазоне точек, соответствующих вершинам многоугольника. |
template
<typename T>
point_iterator_type end_points(const T& polygon) |
Ожидает модель полигона_90. Возвращает конечный итератор по диапазону точек, которые соответствуют вершинам многоугольника. |
template
<typename T, typename iterator>
void set_compact(T& polygon, iterator b, iterator e) |
Ожидает модель полигона_90. Устанавливает многоугольник в диапазон координат [b,e], соответствующий .горизонтальным и вертикальным краям. |
template
<typename T, typename iterator>
void set_points(T& polygon, iterator b, iterator e) |
Ожидает модель полигона_90. Устанавливает многоугольник в точечный диапазон данных [b,e], который соответствует вершинам многоугольника манхэттана. Неманхеттановые края между последовательными входными точками приводят к неопределенному поведению. |
template
<typename T>
unsigned int size(const T& polygon) |
Возвращает количество краев в многоугольнике. |
template
<typename T1, typename T2>
T1& assign(T1& left, const T2& right) |
Скопирует данные с правого объекта, который моделирует полигон_90, в левый объект, который моделирует полигон_90. |
template
<typename T, typename point_type>
bool contains(const T&, const point_type& point,
bool consider_touch=true) |
Учитывая объект, который моделирует полигон_90, и объект, который моделирует точку, возвращается истинно, если полигон содержит точку. Если флаг consider_touch является истинным, он вернется истинным, если точка находится вдоль границы многоугольника. Линейные вершины. |
// get the center
coordinate
template <typename T, typename point_type>
void center(point_type& p, const T& polygon) |
Устанавливает объект, который модели указывают на центральную точку ограничивающей коробки объекта, который моделирует полигон_90. Линейные вершины. |
template
<typename T, typename rectangle_type>
bool extents(rectangle_type& bbox, const T& polygon) |
Устанавливает объект, который модели прямоугольник к ограничивающей коробке объекта, который моделирует полигон_90 и возвращается истинным. Возвращает ложное и оставляет коробку без изменений, если полигон пуст. Линейные вершины. |
template
<typename T>
manhattan_area_type area(const T& polygon) |
Возвращает область объекта, который моделирует полигон_90. Линейные вершины. |
template
<typename T>
direction_1d winding(const T& polygon) |
Возвращает направление обмотки объекта, моделирующего полигон_90, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE. Сложность зависит от извилистой черты. |
template
<typename T>
coordinate_difference perimeter(const T& polygon) |
Возвращает длину периметра объекта, который моделирует многоугольник_90. Линейные вершины. |
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) |
Увеличивает координату объекта, который моделирует полигон_90 по неподписанному фактору. Линейные вершины. |
template
<typename T>
T& scale_down(T& polygon, unsigned_area_type factor) |
Уменьшение координат объекта, моделирующего полигон_90 по неподписанному фактору. Линейные вершины. |
template
<typename T, scaling_type>
T& scale(T& rectangle, double scaling) |
Масштабирует координаты объекта, моделирующего полигон_90 по коэффициенту плавающей точки. Линейные вершины. |
template
<typename T>
T& move(T& polygon, orientation_2d,
coordinate_difference
displacement) |
Добавляет значение смещения для координаты, указанной ориентацией_2d вершин объекта, моделирующего полигон_90. Линейные вершины wrt. |
template
<typename polygon_type, typename point_type>
polygon_type& convolve(polygon_type& polygon,
const point_type& point) |
Сочетает координатные значения точки с вершинами объекта, моделирующего полигон_90. Линейные вершины wrt. |
Polygon 90 Data В библиотеке представлена модель концепции полигона 90, объявленная template polygon_90_data где T - тип координат. Этот тип данных используется внутри, когда требуется полигон Манхэттена, и доступен пользователю библиотеки, который считает удобным использовать тип данных полигона библиотеки вместо предоставления своих собственных. Тип данных реализован для удобства использования с библиотечными чертами. Members
geometry_type |
polygon_90_concept |
coordinate_type |
T |
iterator_type |
Итератор над вершинами point_data вершины полигона |
compact_iterator_type |
Итератор над неизбыточными координатами многоугольника, чередующий x, y, x, y начиная с x, где каждый x соответствует вертикальному краю и каждый y соответствует горизонтальному краю. |
polygon_90_data() |
По умолчанию построен полигон . |
polygon_90_data(const
polygon_90_data& that) |
Копировать конструкцию |
polygon_90_data&
operator=(const polygon_90_data& that) |
Оператор назначения. |
template
<typename T2>
polygon_90_data& operator=(const T2&
that) const |
Назначают из объекта, являющегося моделью полигона 90. |
iterator_type begin()
const |
Получите начальный итератор над вершинами многоугольника. |
iterator_type end()
const |
Получите конечный итератор поверх вершин полигона. |
compact_iterator_type
begin_compact() const |
Получите начальный компактный итератор по неизбыточным координатам полигона. |
compact_iterator_type
end_compact() const |
Получите концевой компактный итератор по неизбыточным координатам полигона. |
std::size_t size()
const |
Получить количество элементов в последовательности, хранящейся на полигоне, обычно равное числу краев полигона. |
template
<typename iT>
void set(iT begin_points, iT end_points) |
Устанавливает полигон в диапазон итераторов точек. Никакая проверка не выполняется, чтобы убедиться, что точки описывают фигуру Манхэттена, каждое другое значение x и y точек используется для инициализации многоугольника. |
template
<typename iT>
void set_compact(iT begin_coords, iT end_coords) |
Устанавливает многоугольник в диапазон координат итератора. Эти координаты соответствуют значениям x вертикальных краев и y значений горизонтальных краев. Предполагается, что последовательность начинается со значения x и продолжается x, затем y, затем y. |
|