Концепция полигона описывает требования к типу полигона. Алгоритмы в Boost. Геометрия будет проверять любые аргументы геометрии против требований концепции.
ПолигонПолигон представляет собой плоскую поверхность, определенную одной внешней границей и нулевой или более внутренней границей.(Простая спецификация OGC)).
Итак, определение увеличения. Геометрический полигон немного отличается от, например. Вики, где у полигона нет дырок. Полигон Роста. Геометрия — это многоугольник с отверстиями или без них.(Полигон без отверстий — этовспомогательная геометриявнутри Boost. Геометрия и называется кольцом.
Концепция полигона определяется следующим образом:
должна быть специализация<traits::tag>, определяющая<polygon_tag>как тип
должна быть специализация<traits::ring_type>, определяющая тип его внешнего кольца и внутренних колец как тип
Этот тип, определенный<ring_type>, должен соответствоватьконцепции кольца.
Должна быть специализация<traits::interior_type>, определяющая тип коллекции его внутренних колец как тип; эта коллекция сама должна выполнять буст. Концепт Range Random Access Range
должна быть специализация<traits::exterior_ring>с двумя функциями, названными<get>, возвращающими внешнее кольцо, одна из которых является const, другая - non const.
должна быть специализация<traits::interior_rings>с двумя функциями, названными<get>, возвращающими внутренние кольца, одно из которых является const, другое - non const.
Помимо Концепций, которые являются проверками на время компиляции, существуют и другие правила, которые должны выполняться действующими многоугольниками. Это следует правилам opengeospatial (см. ссылку выше).
Полигоны — простые геометрические объекты (см. такжевики, но в Boost допускаются отверстия). Геометрические полигоны.
Если полигоны, лежащие в основе<ring_type>, определены по часовой стрелке, внешнее кольцо должно иметь ориентацию по часовой стрелке, и любое внутреннее кольцо должно быть обращено в обратную сторону по заданной ориентации (так: против часовой стрелки для внешних колец по часовой стрелке). Если<ring_type>определено против часовой стрелки, это наоборот.
Если полигоны, лежащие в основе<ring_type>, определены как замкнутые, все кольца должны быть закрыты: первая точка должна быть пространственно равна последней точке.
Интерьер представляет собой соединенную точку.
Не должно быть самопересечений, но допускаются самосопряжения (между внешними/внутренними кольцами) (до тех пор, пока внутренняя часть является соединенной точкой).
Не должно быть обрезанных линий, шипов или проколов.
Внутренние кольца должны быть расположены внутри внешнего кольца. Внутренние кольца могут не располагаться внутри друг друга.
Алгоритмы, такие как пересечение, область, центроид, союз и т. д., не проверяют валидность. Там будет алгоритм is_valid, который проверяет на валидность против этих правил, во время выполнения, и который может быть вызван (пользователем библиотеки) раньше.
Если вход недействителен, выход также может быть недействительным. Например: если полигон, который должен быть закрыт, не закрыт, область будет неправильной.
a Boost.Polygon polygon_with_holes_data (требуется<#includeboost/geometry/geometries/adapted/boost_polygon/polygon.hpp>>)
Статья Polygon Concept раздела Chapter 1. Geometry Concepts может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.