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

Boost Polygon Library: Polygon 45 Set Concept

Boost , ,


Polygon 45 Set Concept

Полигон_45_set concept tag -полигон_45_set_concept

Семантика многоугольника_45_set — это нулевые или более геометрические области, которые имеют углы на вершинах, кратные 45 градусам относительно оси координат.  Полигон 45 Set Concept не имеет смысла в плавающей точке, но в настоящее время не обеспечивает статического утверждения, чтобы предотвратить его использование с координатами плавающей точки.   Результат такого использования не определен.   Когда пересечение двух 45-градусных краев приводит к вершине, которая находится вне целочисленной сетки, этот случай обрабатывается путем введения кромки длины блока между двумя 45-градусными краями вблизи точки пересечения вне сетки.   В случае, если представленные данные не содержат углов 45 градусов и являются Манхэттеном, проверка времени выполнения будет по умолчанию для алгоритма Манхэттена.   Полученные результаты идентичны результатам 45-градусного алгоритма, но получены более эффективно.

Мотивацией для обеспечения многоугольника_45_множества является расширение специального случая геометрии Манхэттена библиотекой, чтобы охватить немного менее распространенный, но все же важный специальный случай геометрии, который описывается углами, кратными 45-дегрессии относительно оси координат. Это упрощает реализацию алгоритмов геометрии и дает много возможностей для оптимизации. 45-градусные алгоритмы могут быть в 50 раз быстрее, чем произвольные угловые алгоритмы, и необходимы для обеспечения полного набора функций, который соответствует требованиям к производительности доменов приложений, в которых Манхэттен и 45-градусная геометрия являются общим частным случаем.

Пользователям рекомендуется использовать std::vector и std::list of userdefined polygons или библиотеку polygon_45_set_dataobjects.  Списки и векторы моделей полигона_45_concept или полигона_45_with_holes_concept автоматически являются моделями полигона_45_set_concept.

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

view_as(polygon_set_object)

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

Operators

Тип возврата некоторых операторов — тип шаблона оператораpolygon_45_set_view.   Этот тип сам по себе является моделью полигона 90, но, кроме того, может использоваться в качестве аргумента для конструктора и оператора присваиванияполигона_45_set_data.   Шаблон оператора существует для устранения временных копий промежуточных результатов, когда булевы операторы связаны друг с другом.

Операторы объявляются внутри пространства именboost::polygon::operators.

template <typename T1, typename T2>
polygon_45_set_view operator|(const T1& l, const T2& r)
Булева операция ИЛИ (полигоновое соединение).   Принимает два объекта, которые моделируют полигон_45_множество или одно из его уточнений.   Возвращает шаблон оператора, который выполняет операцию по требованию, когда он прикован цепью или вложен в вызов функции библиотеки, такой как назначение().  O(n log n) сложности выполнения и O(n) памяти wrt вершин + пересечений.
template <typename T1, typename T2>
polygon_45_set_view operator+(const T1& l, const T2& r)
То же, что и оператор.  Знак плюс также используется для операций ИЛИ в булевых логических выражениях.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
polygon_45_set_view operator&(const T1& l, const T2& r)
Булева и операция (пересечение полигона).   Принимает два объекта, которые моделируют полигон_45_множество или одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
polygon_45_set_view operator*(const T1& l, const T2& r)
Как оператор &.  Символ умножения также используется для операций И в логических выражениях Булева.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
polygon_45_set_view operator^(const T1& l, const T2& r)
Булева операция XOR (полигон устанавливает разъединение).   Принимает два объекта, которые моделируют полигон_45_множество или одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
polygon_45_set_view operator-(const T1& l, const T2& r)
Булева операция SUBTRACT (разница полигона).   Принимает два объекта, которые моделируют полигон_45_множество или одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator|=(const T1& l, const T2& r)
Так же, как оператор, но с самоназначением, левый операнд должен моделировать полигон_45_множество, а не одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator+=(T1& l, const T2& r)
Так же, как оператор +, но с самостоятельным назначением, левый операнд должен моделировать полигон_45_множество, а не одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator&=(const T1& l, const T2& r)
Так же, как оператор & но с самоназначением, левый операнд должен моделировать полигон_45_множество, а не одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator*=(T1& l, const T2& r)
Так же, как оператор*, но с самостоятельным назначением, левый операнд должен моделировать полигон_45_множество, а не одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator^=(const T1& l, const T2& r)
Так же, как оператор, но с самостоятельным назначением, левый операнд должен моделировать полигон_45_множество, а не одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator-=(T1& l, const T2& r)
Так же, как оператор, но с самостоятельным назначением, левый операнд должен моделировать полигон_45_множество, а не одно из его уточнений.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1>
T1 operator+(const T1&, coordinate_type bloating)
Выполняет операции с изменением размера, раздуваясь путем вздутия амплитуды.   Если отрицательный результат — это усадка вместо вздутия.   Примечание: возвращает результат по значению.  O(n log n) сложность выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1 operator-(const T1&, coordinate_type shrinking)
Выполняет операцию по изменению размера, сдуваясь путем вздутия амплитуды.   Если отрицательный результат — это вздутие, а не усадка.   Примечание: возвращает результат по значению.  O(n log n) сложность выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator+=(const T1&, coordinate_type bloating)
Выполняет операции с изменением размера, раздуваясь путем вздутия амплитуды.   Если отрицательный результат — это усадка вместо вздутия.   Возвращает ссылку на измененный аргумент.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T1, typename T2>
T1& operator-=(const T1&, coordinate_type shrinking)
Выполняет операции по изменению размера, сдуваясь путем вздутия амплитуды.   Если отрицательный результат — это вздутие, а не усадка.   Возвращает ссылку на измененный аргумент.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.

Functions

template <typename T1, typename T2>
T1& assign(T1& lvalue, const T2& rvalue)
Устраняет перекрытия в геометрии и копии с объекта, который моделирует многоугольник_45_set или любое из его уточнений, в объект, который моделирует многоугольник_45_set.  O(n log n) сложность выполнения и O(n) память wrt вершин + пересечений.
template <typename T1, typename T2>
bool equivalence(const T1& lvalue, const T2& rvalue)
Возвращается истинно, если объект, который моделирует полигон_45_множество или одно из его уточнений, охватывает точно такие же геометрические области, как и другой объект, который моделирует полигон_45_множество или одно из его уточнений.   Например: два из полигона_45 объектов.  O(n log n) сложности выполнения и O(n) памяти wrt вершин + пересечений.
template <typename output_container_type, typename T>
void get_trapezoids(output_container_type& output,
                    const T& polygon_set)
Выходной контейнер должен быть стандартным контейнером.   Срезы геометрии объекта, которые моделируют многоугольник_45_множество или одно из его уточнений в неперекрывающиеся трапеции вдоль вертикальной ориентации нарезки и добавляют их к выходу, который должен иметь тип значения, который моделирует многоугольник_45, многоугольник_45_с_дырками, многоугольник или многоугольник_с_дырками.   O(n log n) сложность выполнения и O(n) память wrt вершины.
template <typename output_container_type, typename T>
void get_trapezoids(output_container_type& output,
                    const T& polygon_set,
                    orientation_2d orient)
Выходной контейнер должен быть стандартным контейнером.   Срезы геометрии объекта, которые моделируют многоугольник_45_множество или одно из его уточнений в неперекрывающиеся трапеции вдоль указанной ориентации нарезки и добавляют их к выходу, который должен иметь тип значения, который моделирует многоугольник_45, многоугольник_45_с_дырками, многоугольник или многоугольник_с_дырками.   O(n log n) сложность выполнения и O(n) память wrt вершины.
template <typename polygon_set_type>
void clear(polygon_set_type& polygon_set)
Это делает объект пустым от геометрии.
template <typename polygon_set_type>
bool empty(const polygon_set_type& polygon_set)
Проверяет, пуст ли объект в геометрии.   Полигоны, которые полностью покрыты отверстиями, приведут к пустому возвращению истины.    O(n log n) сложность среды выполнения и O(n) вершины памяти.
template <typename T, typename rectangle_type>
bool extents(rectangle_type& extents_rectangle,
             const T& polygon_set)
Вычисляет ограничивающий ящик объекта, который моделирует полигон_45_, и хранит его в объекте, который моделирует прямоугольник.   Если многоугольник пустой, возвращается ложный.   Если есть отверстия за пределами оболочек, они не способствуют протяженности многоугольного множества.   O(n log n) сложности выполнения и O(n) памяти wrt вершин.
template <typename T>
area_type area(const T& polygon_set)
Вычисляет область, охватываемую геометрией, в объекте, который моделирует многоугольник_45_set.   O(n log n) сложности выполнения и O(n) памяти wrt вершин.
template <typename T1, typename T2>
T1& interact(T1& a, const T2& b)
Учитывая объект, который моделирует многоугольник_45_set, и объект, который моделирует многоугольник_45_set или одно из его уточнений, модифицирует a для сохранения только областей, которые перекрывают или касаются областей в b.   O(n log n) сложности выполнения и O(n) памяти wrt вершин плюс пересечения.
template <typename T>
T& self_intersect(T& polygon_set)
Учитывая объект, который моделирует многоугольник_45_set, который имеет самоперекрывающиеся области, модифицирует аргумент, чтобы содержать только области перекрытия.  O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T>
T& self_xor(T& polygon_set)
Учитывая объект, который моделирует многоугольник_45_set, который имеет самоперекрывающиеся области, модифицирует аргумент, чтобы содержать только области, которые не перекрываются.  O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T>
T& bloat(T& polygon_set, unsigned_area_type bloating)
То же самое, что получить все полигоны, раздуть их и вернуть обратно.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T>
T& shrink(T& polygon_set, unsigned_area_type shrinking)
То же самое, что получить все полигоны, сжать их и перезаписать набор полигонов с полученными областями.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T, typename coord_type>
T& resize(T& polygon_set, coord_type resizing,
          RoundingOption rounding = CLOSEST,
          CornerOption corner = INTERSECTION)
То же самое, что вздутие, если изменение размера является положительным, то же самое, что уменьшение, если изменение размера является отрицательным.   RoundingOption - это число, которое контролирует щелчок нецелочисленных результатов изменения размера 45-градусных краев.   CornerOption - это список, который контролирует, как выполняется заполнение угла.  polygon_45_set_data.hpp определяет эти перечисления.  O(n log n) сложность выполнения и O(n) память wrt вершины + пересечения.
template <typename T>
T& grow_and(T& polygon_set, unsigned_area_type bloating)
То же самое, что вздутие непересекающихся областей, а затем применение самопересекается, чтобы сохранить только перекрытия, введенные вздутием.   O(n log n) сложность времени выполнения и O(n) память wrt вершины + пересечения.
template <typename T>
T& scale_up(T& polygon_set, unsigned_area_type factor)
Масштабирует геометрию по неподписанному фактору.  O(n log n) сложности выполнения и O(n) памяти wrt вершины.
template <typename T>
T& scale_down(T& polygon_set, unsigned_area_type factor)
Снижает геометрию по неподписанному фактору.   Усечение 45 градусов назад до 45 градусов после усечения деления приводит к небольшим изменениям угла.   O(n log n) сложность времени выполнения и O(n) вершины памяти.
template <typename T, typename scaling_type>
T& scale(polygon_set_type& polygon_set, double scaling)
Масштабирует геометрию путем умножения на коэффициент плавающей точки.    Удары 45 градусов назад до 45 градусов после усечения дробных результатов умножения приводят к небольшим изменениям угла.   O(n log n) сложность времени выполнения и O(n) вершины памяти.
template <typename T, typename transformation_type>
T& transform(T& polygon_set,
             const transformation_type& transformation)
Применяет transformation.transform() на всех вершинах.   O(n log n) сложность времени выполнения и O(n) вершины памяти.
template <typename T>
T& keep(T& polygon_set,
        unsigned_area_type min_area,
        unsigned_area_type max_area,
        unsigned_area_type min_width,
        unsigned_area_type max_width,
        unsigned_area_type min_height,
        unsigned_area_type max_height)
Сохраняет только области, удовлетворяющие критериям min/max в списке аргументов. Примечание: полезно для визуализации, чтобы отсеять слишком маленькие многоугольники.   O(n log n) сложность времени выполнения и O(n) вершины памяти.

Polygon 45 Set Data Object

Тип набора данных полигона 45 инкапсулирует внутренний формат данных, который служит вводом в алгоритм линии развертки, который реализует булевы операции полигона.   Он также отслеживает, были ли эти данные отсортированы или отсканированы, и сохраняет инвариант, который, когда его флаги указывают, что данные отсортированы или отсканированы, данные не были изменены, чтобы нарушить это предположение.   Прямое использование типа набора данных Polygon 45 может быть более эффективным, чем использование списков и векторов многоугольников в вышеперечисленных функциях из-за инвариантов, которые он может применять, которые обеспечивают возможность поддерживать сортированную форму данных, а не выходить на многоугольники, а затем прибегать к этим вершинам для последующей операции.

Объявление Polygon 45 Set Data:

шаблон
класс polygon_45_set_data;

Класс параметризуется по типу координатных данных. Алгоритмы, которые извлекают выгоду из знаний об инвариантах, применяемых классом, реализуются в качестве функций-членов, чтобы предоставить им доступ к информации об этих инвариантах.  

Member Functions

polygon_45_set_data() Конструктор по умолчанию.
template <typename iT>
polygon_45_set_data(iT input_begin, iT input_end)
Конструкция из итератора диапазона вставляемых объектов.
polygon_45_set_data(const polygon_45_set_data& that) Копировать конструкцию.
template <typename l, typename r, typename op>
polygon_45_set_data(const polygon_45_set_view<l,r,op>& t)
Копировать конструкцию из шаблона булевого оператора.
polygon_45_set_data&
operator=(const polygon_45_set_data& that)
Назначение из другого набора многоугольников может изменить ориентацию сканирования.
template <typename l, typename r, typename op>
polygon_45_set_data&
operator=(const polygon_45_set_view<l, r, op>& that)
Назначение от шаблона булевого оператора.
template <typename geometry_object>
polygon_45_set_data& operator=(const geometry_object& geo)
Назначение от вставляемого объекта.
template <typename iT>
void insert(iT input_begin, iT input_end,
            bool is_hole = false)
Вставьте объекты диапазона итераторов.   Если is_hole - это истинные вставки субтрактивных областей.   Линейное число добавленных вершин.
void insert(const polygon_45_set_data& polygon_set,
            bool is_hole = false)
Вставьте набор многоугольников.  Линейный сорт количество добавленных вершин.
template <typename geometry_type>
void insert(const geometry_type& geometry_object,
            bool is_hole = false)
Вставьте объект геометрии, если это_дыра, то вставленная область является субтрактивной, а не аддитивной.   Линейное число добавленных вершин.
template <typename output_container>
void get(output_container& output) const
Ожидает стандартный контейнер геометрических объектов.   Будет сканировать и устранять перекрытия. Преобразует геометрию многоугольника в объекты такого типа и добавляет их в контейнер.   Полигоны будут выведены с обмоткой против часовой стрелки, дырочные полигоны будут выведены с обмоткой по часовой стрелке.   Последняя вершина выходного полигона не является дубликатом первой, а число точек равно числу кромок.  O(n log n) runtime и O(n) memory wrt. vertices + intersections.
template <typename output_container>
void get_polygons(output_container& output) const
Ожидает стандартный контейнер из полигонных объектов.   Будет сканировать и устранять перекрытия. Преобразует геометрию многоугольника в многоугольники и добавляет их к контейнеру.   У полигонов будут пробиты отверстия к внешней границе вдоль положительного направления y.   O(n log n) runtime и O(n) memory wrt. вершины + пересечения.
template <typename output_container>
void get_polygons_with_holes(output_container& o) const
Ожидает стандартный контейнер из полигона с отверстиями объектов.   Будет сканировать и устранять перекрытия. Преобразует геометрию многоугольника в многоугольники и добавляет их к контейнеру.   O(n log n) runtime и O(n) memory wrt. вершины + пересечения.
template <typename output_container>
void get_trapezoids(output_container& output) const
Ожидает стандартный контейнер из полигонных объектов.   Будет сканировать и устранять перекрытия.   Срезы многоугольника устанавливают геометрию для трапеции вертикально и прикрепляют их к контейнеру.   O(n log n) runtime и O(n) memory wrt. вершины + пересечения.
template <typename output_container>
void get_trapezoids(output_container& output,
  orientation_2d slicing_orientation) const
Ожидает стандартный контейнер из полигонных объектов.   Будет сканировать и устранять перекрытия.   Срезы многоугольника устанавливают геометрию на трапеции вдоль заданной ориентации и прикладывают их к контейнеру.   O(n log n) runtime и O(n) memory wrt. вершины + пересечения.
bool operator==(const polygon_45_set_data& p) const После сканирования данные представления геометрии внутри многоугольного множества находятся в математически канонической форме. Сравнение между двумя множествами является линейной операцией времени, когда они находятся в сканируемом состоянии. Будет сканировать и устранять перекрытия в обоих наборах многоугольников.   O(n log n) время выполнения и O(n) память wrt. вершины + пересечения в первый раз и линейное время выполнения и постоянная память впоследствии.  
bool operator!=(const polygon_45_set_data& p) const Обратная логика оператора эквивалентности.
void clear() Сделайте полигон пустым.   Примечание: не удаляет память.   Используйте сокращение, чтобы соответствовать идиоме и назначить по умолчанию построенный многоугольник для де-распределения.
bool empty() const Проверьте, не содержит ли многоугольник геометрии.   Будет сканировать и устранять перекрытия, потому что субтрактивные области могут сделать многоугольник пустым.   O(n log n) runtime и O(n) memory wrt. вершины + пересечения в первый раз и линейное время выполнения и постоянная память впоследствии.  
bool is_manhattan() const Возвращает в постоянное время информацию о том, содержит ли геометрия только Манхэттенские (осево-параллельные прямолинейные) края.   - постоянное время.
void clean() const Сканирование и устранение перекрытий.   O(n log n) runtime и O(n) memory wrt. vertices + пересечения первого времени и линейного выполнения и постоянной памяти впоследствии.  
template <typename input_iterator_type>
void set(input_iterator_type input_begin,
         input_iterator_type input_end)
Перезаписывающая геометрия в многоугольном наборе с вставляемыми объектами в диапазоне итераторов.  
template <typename rectangle_type>
bool extents(rectangle_type& extents_rectangle) const
Учитывая объект, который моделирует прямоугольник, сканирует и устраняет перекрытия в наборе полигонов, потому что субтрактивные области могут изменять его протяженность, затем вычисляет ограничивающий ящик и присваивает его протяженности_прямоуголь.  O(n log n) время выполнения и O(n) память wrt. Вершины первого времени и линейного времени выполнения и постоянной памяти впоследствии.  
polygon_45_set_data&
resize(coord_type resizing,
       RoundingOption rounding = CLOSEST,
       CornerOption corner = INTERSECTION)
То же самое, что вздутие, если изменение размера является положительным, то же самое, что уменьшение, если изменение размера является отрицательным.   RoundingOption - это число, которое контролирует щелчок нецелочисленных результатов изменения размера 45-градусных краев.   CornerOption - это список, который контролирует, как выполняется заполнение угла.  polygon_45_set_data.hpp определяет эти перечисления.  O(n log n) время выполнения и O(n) память wrt. вершины + пересечения.
template <typename transformation_type>
polygon_45_set_data&
transform(const transformation_type& transformation)
Применяется transformation.transform() на вершинах, хранящихся в многоугольном наборе.  O(n log n) runtime и O(n) memory wrt. vertices + intersections.
polygon_45_set_data& scale_up(unsigned_area_type factor) Масштабные вершины, хранящиеся внутри полигона, устанавливаются по фактору.   Линейные вершины wrt.
polygon_45_set_data& scale_down(unsigned_area_type factor)  Масштабные вершины, хранящиеся в полигоне, устанавливаются по фактору.   Линейные вершины wrt.
polygon_45_set_data& scale(double factor) Масштабные вершины, хранящиеся в полигоне, задаются коэффициентом плавающей точки.   Линейные вершины wrt.
polygon_45_set_data& self_xor() Сохраняйте только непересекающиеся области геометрии в многоугольном наборе.  O(n log n) время выполнения и O(n) память wrt. вершины + пересечения.
polygon_45_set_data& self_intersect() Сохраняйте только перекрывающиеся области геометрии в многоугольном наборе.  O(n log n) время выполнения и O(n) память wrt. вершины + пересечения.
bool has_error_data() const Возвращение истинно, если нецелочисленные пересечения привели к небольшим артефактам в выходе булева.
std::size_t error_count() const Возвращает количество артефактов, которые потенциально могут присутствовать на выходе из-за нецелочисленных пересечений.   - постоянное время.
void get_error_data(polygon_45_set_data& p) const Заполняет входной многоугольник множеством квадратов 1x1 единицы, которые связывают ошибку, которая может присутствовать на выходе из-за нецелых пересечений.   Линейные вершины данных об ошибках.
polygon_45_set_data& self_intersect() Сохраняйте только перекрывающиеся области геометрии в многоугольном наборе.  O(n log n) время выполнения и O(n) память wrt. вершины + пересечения.
 
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 45 Set Concept раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

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