Polygon Sponsor
|
Segment Concept
Сегмент_концепцияСегмент_концепция[ORIG_END] -->
Для регистрации определенного пользователем типа в качестве модели концепта сегмента специализируйте метафункцию концепта геометрии для данного типа. В приведенном ниже примере CSegment зарегистрирован как модель концепции сегмента.
template
<>
struct geometry_concept<CSegment>
{ typedef segment_concept type; };
Семантика сегмента заключается в том, что он имеет низкую и высокую точку. A std::pair, boost::tupleили boost::array— все эти объекты могут быть сделаны моделями сегмента, просто предоставляя косвенный доступ к их элементам через черты, однако эти объекты не могут быть сделаны моделью как сегмента, так и прямоугольника в одном и том же блоке компиляции, по очевидной причине, что дублирующая специализация структуры геометрии_концепции является незаконной, но также потому, что это сделало бы перегрузку общей функции по концепции неоднозначной, если тип моделируется более чем одной концепцией.
Ниже показаны характеристики сегмента по умолчанию. Специализация этих черт необходима для типов, которые не соответствуют по умолчанию.
шаблон структурный сегмент_traits { typedef typename Сегмент::coordinate_type coordinate_type typedef typename Сегмент: point_type point_type
статическая inline point_type get(const Segment& segment, direction_1d dir) { return segment.get(dir); } };
template struct segment_mutable_traits { Типовое имя segment_traits< Сегмент>::coordinate_typeкоординатный_тип; typedef typename segment_traits::point_type point_type;
статическое inline void set(Segment& segment, direction_1d dir, const point_type& point) { segment.set(dir, p); }
статическое inline Segment construct(const point_type& low, const point_type& high) { Return Segment(low, high); }
Functions
template
<typename Segment>
point_type get(const Segment& segment, direction_1d dir) |
Возвращает низкую или высокую конечную точку объекта, который моделирует сегмент, в зависимости от направления _1d. |
template
<typename Segment, typename Point>
void set(Segment& segment, direction_1d dir,
const Point& point) |
Устанавливает низкую или высокую конечную точку объекта, который моделирует сегмент, на объект, который моделирует точку, в зависимости от значения направления_1d. |
template
<typename Segment, typename Point1, typename Point2>
Segment construct(const Point1& low, const Point2& high) |
Конструирует объект, который является моделью сегмента, учитывая два объекта, которые являются моделями точки. |
шаблонSegment2> Segment1copy_construct(constSegment2& segment] |
Copy constructs an object
that models segment given another segment. |
template
<typename Segment1, typename Segment2>
Segment1& assign(Segment1& segment1,
const Segment2& segment2) |
Копиирует данные со второго объекта, который моделирует сегмент, на первый объект, который моделирует сегмент. |
template
<typename Segment1, typename Segment1>
bool equivalence(const Segment1& segment1,
const Segment1& segment2) |
Учитывая два объекта, которые моделируют сегмент, сравнивают и возвращают истинное, если их низкие и высокие значения соответственно равны. |
шаблон ориентацияСегмент& сегмент const Point& point]
|
Реализует надежный тест ориентации двух объектов, которые моделируют сегмент и точку. Возвращается 0, если точка коллинеарна к сегменту. Возвращается 1, если точка лежит слева от сегмента. Возвращается -1, если точка лежит справа от сегмента.
|
шаблон intориентация(const& segment1, const Segment2& segment2) |
Внедряет надежный тест ориентации двух объектов, которые моделируют сегмент. Примечание: сегменты рассматриваются как математика. векторов. Возвращается 0, если сегменты коллинеарны. Возвращает 1, если второй сегмент ориентирован на первый сегмент. Возвращает -1, если второй сегмент ориентирован на первый сегмент.
|
шаблонСегмент, Typename Point> boolсодержит[constСегмент& сегмент const Point& значение,bool consider_touch]
|
Возвращается истинно, если объект, который моделирует сегмент, содержит объект, который моделирует точку, а не ложный.
|
шаблон boolсодержит[constSegment1& segment1, constСегмент2& сегмент2,bool consider_touch |
Возвращается истинным, если первый объект содержит второй, а другой ложный. Оба объекта модельного сегмента.
|
template
<typename Segment>
point_type low(const Segment&
segment)
|
Возвращает низкую конечную точку объекта, который моделирует сегмент.
|
template
<typename Segment>
point_type high(const Segment&
segment) |
Возвращает высокую конечную точку объекта, который моделирует сегмент.
|
template
<typename Segment>
point_type center(const Segment&
segment) |
Возвращает центральную точку объекта, который моделирует сегмент.
|
template
<typename Segment,
typename Point>
void low(Segment&
segment, const Point& point) |
Устанавливает низкую конечную точку объекта, который моделирует сегмент.
|
template
<typename Segment,
typename Point>
void high(Segment&
segment, const Point& point) |
Устанавливает высокую конечную точку объекта, который моделирует сегмент.
|
шаблонСегмент> расстояние_типдлина(констСегмент& сегмент]
|
Возвращает длину объекта, который моделирует сегмент.
|
template
<typename Segment>
Segment& scale_up(Segment& segment,
unsigned_area_type factor) |
Умножает координаты x и y обеих конечных точек объекта, которые моделируют сегмент по неподписанному фактору. |
template
<typename Segment>
Segment& scale_down(Segment& segment,
unsigned_area_type factor) |
Разделяет координаты x и y обеих конечных точек объекта, которые моделируют сегмент по неподписанному фактору. |
template
<typename Segment, typename Scale>
Segment& scale(Segment& segment, const Scale& sc) |
Называет функцию масштабирования типа масштабирования на низкой и высокой конечной точке объекта, которая моделирует сегмент и обновляет сегмент с помощью масштабируемых конечных точек. |
template
<typename Segment, typename Transform>
Segment& transform(Segment& segment, const Transform& tr) |
Называет функцию трансформатора типа преобразования на низких и высоких конечных точках объекта, который моделирует сегмент и обновляет сегмент с преобразованными конечными точками. |
template
<typename Segment>
Segment& move(Segment& segment, orientation_2d
coordinate_difference displacement) |
Добавляет значение смещения к координатам x или y обеих конечных точек объекта, которые моделируют сегмент, обозначенный ориентацией_2d. |
template
<Segment,
Point>
Segment& convolve(Segment& segment, const Point& point) |
Обе конечные точки объекта, который моделирует сегмент, с объектом, который моделирует точку.
|
template
<Segment,
Point>
Segment& deconvolve(Segment& segment, const Point& point) |
Развертывание обеих конечных точек объекта, который моделирует сегмент, с объектом, который моделирует точку. |
template
<typename Segment1, typename Segment2>
bool abuts(const Segment1&
segment1,
const Segment2& segment2, direction_1d dir) |
Возвращается истинно, если два объекта, которые моделируют сегмент, но, в зависимости от направления_1d значения. |
template
<typename Segment1, typename Segment2>
bool abuts(const Segment1&
segment1,
const
Segment2& segment2) |
Возвращается истинно, если два объекта, которые моделируют сегмент, находятся рядом: либо первый, либо второй, либо наоборот. |
templateboolintersects & |
Возвращается истинно, если два объекта, которые сегмент модели пересекаются, иначе ложно.
|
template
<typename Segment, typename
Point>
distance_type euclidean_distance(
const Segment& segment, const Point& point) |
Возвращает расстояние от объекта, который моделирует сегмент, к объекту, который модели указывают. |
template
<typename Segment1, typename Segment2>
distance_type euclidean_distance(
const Segment1& segment1, const Segment2&
segment2) |
Возвращает расстояние между двумя объектами, которые моделируют сегмент. |
Segment Data
В библиотеке представлена модель концепта сегмента, объявленногоtemplatesegment_data, где T — тип координат.
Этот тип данных используется внутри, когда сегмент необходим и доступен пользователю библиотеки, который считает удобным использовать тип данных сегмента библиотеки вместо предоставления своих собственных. Тип данных реализован для удобства использования с библиотечными чертами.
Members
geometry_type |
Сегмент_концепция |
coordinate_type |
T |
point_type |
point_data
|
segment_data() |
Конструктор по умолчанию. |
segment_data(const
point_type& low,
const point_type& high) |
Построение сегмента из заданных конечных точек. |
segment_data(const
segment_data& that) |
Копировать конструктор. |
segment_data& operator=(const
segment_data& that) |
Оператор назначения. |
template
<typename SegmentType>
segment_data& operator=(const SegmentType&
that)
const |
Назначение от объекта, являющегося моделью сегмента. |
bool operator==(const
segment_data& that) const |
Перегрузка оператора равенства. |
bool
operator!=(const segment_data& that) const |
Перегрузка оператора неравенства. |
bool
operator<(const segment_data& that) const |
Меньше перегрузок оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
|
bool
operator<=(const segment_data& that) const |
Меньшая или равная перегрузка оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
|
bool
operator>(const segment_data& that) const |
Большая перегрузка оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
|
bool
operator>=(const segment_data& that) const |
Большая или равная перегрузка оператора. Сравните низкие конечные точки, а затем высокие конечные точки, чтобы разорвать связи.
|
point_type get(direction_1d
dir) const |
Получает низкую / высокую конечную точку с учетом значения направления. |
point_type low() const |
Восстанавливает низкую конечную точку. |
point_type high() const |
Получает высокую конечную точку. |
void set(direction_1d dir,
const point_type& point) |
Установите конечную точку в заданном направлении. |
segment_data& low(const point_type& point) |
Устанавливает низкую конечную точку. |
segment_data& high(const point_type& point) |
Устанавливает высокую конечную точку. |
Segment Utils
Библиотека предоставляет несколько алгоритмов для манипулирования
наборов сегментных данных. В частности, общий сегмент линии
Алгоритм пересечения, используемый для операций многоугольного набора, подвергается воздействию
через несколько интерфейсов, чтобы позволить его использовать с любой коллекцией
или последовательность объектов, которые моделируют Сегмент_концепция.
.Сегмент_концепция.
[ORIG_END] -->
Functions
template
<typename SegmentContainer,
typename
SegmentIterator>
void intersect_segments(
SegmentContainer*
result,
SegmentIterator
first,
SegmentIterator last) |
Накопляет результат расщепления сегментов в диапазоне итераторов в точках их пересечения в контейнер результата. Предпосылки: тип сегмента, используемый всеми входными структурами, должен моделировать концепцию сегмента. Пост-условия: никакие сегменты не пересекаются, за исключением их конечных точек. Полезно для удовлетворения предварительных условий построения диаграммы вороной. Ожидаемый n log n runtime, худший случай квадратичный runtime wrt. vertices + intersections. |
template
<typename Segment,
typename SegmentIterator>
void intersect_segments(
vector<pair<size_t,
Segment>* result,
SegmentIterator
first,
SegmentIterator last) |
Накопляет результат расщепления сегментов в диапазоне итераторов в точках их пересечения в контейнер результата. Предпосылки: тип сегмента, используемый всеми входными структурами, должен моделировать концепцию сегмента. Пост-условия: никакие сегменты не пересекаются, за исключением их конечных точек. Индекс входного сегмента сопоставляется с каждым результирующим сегментом, который был разделен для его создания, чтобы связать сегменты результата с входными сегментами. Ожидаемый n log n runtime, худший случай квадратичный runtime wrt. vertices + intersections. |
template
<typename Rectangle,
typename SegmentIterator>
void envelope_segments(
Rectangle* rect,
SegmentIterator first,
SegmentIterator last) |
Вычисляет ограничивающий прямоугольник диапазона итераторов линейных сегментов. Предпосылки: тип сегмента и тип прямоугольника, используемые входными структурами, должны моделировать концепцию сегмента и концепцию прямоугольника соответственно. Линейное время выполнения. |
|