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

Boost Polygon Library: Rectangle Concept

Boost , ,


Rectangle Concept

Тег прямоугольника rectangle_concept

Для регистрации определенного пользователем типа в качестве модели прямоугольного понятия, специализируйте понятие геометрии метафункции для этого типа.   В приведенном ниже примере CRectangle зарегистрирован как модель прямоугольника концепции.

template <>
struct geometry_concept { typedef rectangle_concept type; };

Семантика прямоугольника состоит в том, что он имеет интервал x и y, и эти интервалы соответствуют семантике интервала, включая его инвариант.   Этот инвариант на интервалах прямоугольника обеспечивается общими библиотечными функциями, которые работают на прямоугольниках, и не ожидается самого типа данных или отображения понятия этого типа данных на понятие прямоугольника через его черты.   Таким образом, импульс::tuple или boost::array можно сделать моделями прямоугольника, просто предоставляя косвенный доступ к их элементам через черты.

Ниже показаны прямоугольные черты по умолчанию. Специализация этих черт требуется для типов, которые не соответствуют по умолчанию.   Заинтересованный читатель заметит, что SFINAE используется на чертах, чтобы позволить только объекту, который предоставляет определение типа участника интервала_типа, работать с чертами чтения по умолчанию.   Это становится необходимым, когда используются уточнения понятий, и нежелательно пытаться сопоставить черты по умолчанию с непрямоугольными типами во время компиляции.   Специализироваться на прямоугольных чертах можно легко, просто предоставив gtl_yes в качестве параметра включения.

template
struct rectangle_traits {};

template
struct rectangle_traits{};

template <typename T>
struct rectangle_traits<T, typename gtl_same_type<typename T::interval_type, typename T::interval_type>::type> {
     typedef typename T::coordinate_type coordinate_type;
     typedef typename T::interval_type interval_type;
     static inline interval_type get(const T& rectangle, orientation_2d orient) {
          return rectangle.get(orient); }
};

template <typename T>
struct rectangle_mutable_traits {
     template <typename T2>
     static inline void set(T& rectangle, orientation_2d orient, const T2& interval) {
          rectangle.set(orient, interval); }
     template <typename T2, typename T3>
     static inline T construct(const T2& interval_horizontal, const T3& interval_vertical) {
          return T(interval_horizontal, interval_vertical); }
};
[ORIG_END] -->

Functions

template <typename T>
interval_type get(const T& rectangle, orientation_2d)
Ожидает модель прямоугольника.   Возвращает интервал x или y прямоугольника в зависимости от ориентации_2d.
 
template <typename T, typename coordinate_type>
void set(T& rectangle, orientation_2d, coordinate_type)
Ожидает модель прямоугольника.    Устанавливает x интервал или y интервал прямоугольника на координату в зависимости от ориентации_2d значения.
template <typename T>
interval_type get(const T& rectangle, orientation_2d,
                  direction_1d)
Ожидает модель прямоугольника.   Возвращает координату, заданную значением направления_1d интервала x или интервала y прямоугольника, в зависимости от значения ориентации_2d.
 
template <typename T, typename coordinate_type>
void set(T& rectangle, orientation_2d, direction_1d,
         coordinate_type)
Ожидает модель прямоугольника.    Устанавливает координату, указанную значением направления_1d интервала x или интервала y прямоугольника к координате, в зависимости от ориентации_2d значения.
template <typename T, typename T2>
T construct(const T2& h, const T2& v)
Постройте объект, который является моделью прямоугольника с заданными интервалами x и y.
template <typename T, typename T2>
T construct(coordinate_type xl, coordinate_type yl,
            coordinate_type xh, coordinate_type yh)
Постройте объект, который является моделью прямоугольника с четырьмя значениями координат.
template <typename T1, typename T2>
T1& assign(T1& left, const T2& right)
Копирует данные с правого объекта, который модели прямоугольник в левый объект, который модели прямоугольник.
template <typename T, typename T2>
bool equivalence(const T& rectangle1,

                 const T2& rectangle2)
Учитывая два объекта, которые моделируют прямоугольник, сравнивает и возвращает истинность, если их интервалы x и y соответственно эквивалентны.
template <typename T, typename point_type>
bool contains(const T&, const point_type& point,
              bool consider_touch=true)
Учитывая объект, который моделирует прямоугольник, и объект, который моделирует точку, возвращается истинно, если прямоугольник содержит точку.   Если флаг consider_touch является истинным, он вернется истинным, если точка находится вдоль границы прямоугольника.
template <typename T1, typename T2>
bool contains(const T1& a, const T2& b,
              bool consider_touch = true)
Возвращается истинным, если модель прямоугольника a содержит оба интервала модели прямоугольника b.  Если флаг consider_touch верен, то будет считаться прямоугольник b, содержащийся, даже если он касается границы a.
template <typename T>
interval_type horizontal(const T& rectangle)
Возвращает интервал x объекта, который моделирует прямоугольник.
template <typename T>
interval_type vertical(const T& rectangle)
Возвращает интервал Y объекта, который моделирует прямоугольник.
template <typename T>
coordinate_type xl(const T& rectangle)
Возвращает западную координату объекта, моделирующего прямоугольник.
template <typename T>
coordinate_type xh(const T& rectangle)
Возвращает восточную координату объекта, который моделирует прямоугольник.
template <typename T>
coordinate_type yl(const T& rectangle)
Возвращает южную координату объекта, который моделирует прямоугольник.
template <typename T>
coordinate_type yh(const T& rectangle)
Возвращает северную координату объекта, моделирующего прямоугольник.
template <typename T>
point_type ll(const T& rectangle)
Возвращает нижнюю левую угловую точку объекта, который моделирует прямоугольник.
template <typename T>
point_type lr(const T& rectangle)
Возвращает нижнюю правую точку угла объекта, который моделирует прямоугольник.
template <typename T>
point_type ul(const T& rectangle)
Возвращает верхнюю левую угловую точку объекта, который моделирует прямоугольник.
template <typename T>
point_type ur(const T& rectangle)
Возвращает верхнюю правую угловую точку объекта, который моделирует прямоугольник.
// get the center coordinate
template <typename T, typename point_type>
void center(point_type& p, const T& rectangle)
Устанавливает объект, который модели указывают на центральную точку объекта, который моделирует прямоугольник.
template <typename T, typename interval_type>
void horizontal(T& rectangle, const interval_type& i)
Устанавливает интервал x объекта, который моделирует прямоугольник, равным значению объекта, который моделирует интервал.
template <typename T, typename interval_type>
void vertical(T& rectangle, const interval_type& i )
Устанавливает интервал y объекта, который моделирует прямоугольник, равным значению объекта, который моделирует интервал.
template <typename rectangle_type>
void xl(rectangle_type& rectangle, coordinate_type )
Устанавливает западную координату объекта, которая моделирует прямоугольник, равный значению координаты.
template <typename rectangle_type>
void xh(rectangle_type& rectangle, coordinate_type )
Устанавливает восточную координату объекта, которая моделирует прямоугольник, равный значению координаты.
template <typename rectangle_type>
void yl(rectangle_type& rectangle, coordinate_type )
Устанавливает южную координату объекта, которая моделирует прямоугольник, равный значению координаты.
template <typename rectangle_type>
void yh(rectangle_type& rectangle, coordinate_type )
Устанавливает северную координату объекта, которая моделирует прямоугольник, равный значению координаты.
template <typename T, typename T1, typename T2>
T& set_points(T& rectangle, const T1& p1, const T2& p2)
Устанавливает прямоугольник в прямоугольник, полностью описанный точками p1 и p2.
template <typename T>
coordinate_difference delta(const T& rectangle,
                            orientation_2d)
Возвращает дельту интервала, заданную ориентацией_2d объекта, который моделирует прямоугольник.
template <typename T>
manhattan_area_type area(const T& rectangle)
Возвращает область объекта, который моделирует прямоугольник.
template <typename T>
coordinate_difference half_perimeter(const T& rectangle)
Возвращает длину плюс ширину объекта, который моделирует прямоугольник.
template <typename T>
coordinate_difference perimeter(const T& rectangle)
Возвращает длину периметра объекта, который моделирует прямоугольник.
template <typename T>
orientation_2d quess_orientation(const T& rectangle)
Возвращает ориентацию, в которой прямоугольник имеет более длинную дельту.   возвращает HORIZONTAL, если прямоугольник является квадратом.
template <typename rectangle_type>
rectangle_type& transform(rectangle_type& rectangle,
                          coordinate_type axis = 0)
Применяет преобразование() на двух точках, которые полностью описывают прямоугольник, и устанавливает прямоугольник на то, что описано в результате преобразования этих точек.
template <typename rectangle_type>
rectangle_type& scale_up(rectangle_type& rectangle,
                         unsigned_area_type factor)
Увеличивает интервал x и интервал y  объекта, который моделирует прямоугольник по неподписанному фактору.
template <typename rectangle_type>
rectangle_type& scale_down(rectangle_type& rectangle,
                           unsigned_area_type factor)
Увеличивает интервал x и интервал y  объекта, который моделирует прямоугольник по неподписанному фактору.
template <typename rectangle_type, scaling_type>
rectangle_type& scale(rectangle_type& rectangle,
                      const scaling_type& scaling)
Применяет шкалу () на двух точках, которые полностью описывают прямоугольник, и устанавливает прямоугольник на то, что описано в результате преобразования этих точек.
template <typename T>
T& move(T& rectangle, orientation_2d,
        coordinate_difference displacement)
Добавляет значение смещения к интервалу, указанному ориентацией_2d объекта, который моделирует прямоугольник.
template <typename rectangle_type, typename point_type>
rectangle_type& convolve(rectangle_type& rectangle,
                         const point_type& point)
Сводит координатные значения точки с интервалом x и интервалом y  объекта, моделирующего прямоугольник.
template <typename rectangle_type, typename point_type>
rectangle_type& deconvolve(rectangle_type& rectangle,
                           const point_type& point)
Развертывание координатных значений интервала точки с х и интервала y  объекта, моделирующего прямоугольник.
template <typename T1, typename T2>
T1& convolve(T1& a, const T2& b)
Сводит x интервал   b с x интервал   a и сворачивает y интервал   b с y интервалом   a.
template <typename T1, typename T2>
T1& deconvolve(T1& a, const T2& b)
Deconvolves x interval  of b with x interval  of a and deconvolves y interval  of b with y interval  of a.
template <typename T1, typename T2>
T1& reflected_convolve(T1& a, const T2& b)
Отраженные сворачиваются y интервала   b с x интервала   a и отраженные сворачиваются x интервала   b с y интервала   a.
template <typename T1, typename T2>
T1& reflected_deconvolve(T1& a, const T2& b)
Отраженные деконволы y интервала   b с x интервалом   a и отраженные деконволы x интервала   b с y интервалом   a.
template <typename T, typename point_type>
coordinate_difference euclidean_distance(const T&,
       const point_type& point, orienation_2d)
Возвращает расстояние от объекта, который моделирует прямоугольник, к объекту, который модели указывают вдоль заданной ориентации.   Возвращается ноль, если точка содержится в прямоугольнике вдоль этой ориентации.
template <typename T1, typename T2>
coordinate_difference euclidean_distance(const T1& a,
       const T2& b, orienation_2d)
Возвращает расстояние от объекта, моделирующего прямоугольник, к объекту, моделирующему прямоугольник вдоль заданной ориентации.   Возвращается к нулю, если интервалы прямоугольников пересекаются вдоль этой ориентации.
template <typename T, typename point_type>
coordinate_difference square_euclidean_distance(const T&,
       const point_type& point)
Возвращает квадрат евклидового расстояния между точкой и прямоугольником.   Возвращает ноль, если точка находится внутри прямоугольника.
template <typename T1, typename T2>
coordinate_difference square_euclidean_distance
       (const T1& a, const T2& b)
Возвращает квадрат евклидового расстояния между прямоугольниками a и b.  Возвращает ноль, если прямоугольники пересекаются.
template <typename T, typename point_type>
coordinate_difference manhattan_distance(const T&,
       const point_type& point)
Возвращает расстояние Манхэттена между точкой и прямоугольником.   Возвращает ноль, если точка находится внутри прямоугольника.
template <typename T1, typename T2>
coordinate_difference manhattan_distance(const T1& a,
                                         const T2& b)
Возвращает расстояние между прямоугольниками a и b.  Возвращает ноль, если прямоугольники пересекаются.
template <typename T, typename point_type>
coordinate_distance euclidean_distance(const T&,
       const point_type& point)
Возвращает евклидово расстояние между точкой и прямоугольником.   Возвращает ноль, если точка находится внутри прямоугольника.
template <typename T1, typename T2>
coordinate_distance euclidean_distance(const T1& a,
                                         const T2& b)
Возвращает евклидово расстояние между прямоугольниками a и b.  Возвращает ноль, если прямоугольники пересекаются.
template <typename T1, typename T2>
bool intersects(const T1& a, const T2& b,
                bool consider_touch = true)
Верно, если два объекта, которые модели прямоугольника перекрываются.   Если флаг consider_touch действительно касается сторон или углов, это считается перекрытием.
template <typename T1, typename T2>
bool boundaries_intersect(const T1& a, const T2& b,
                          bool consider_touch = true)
Верность возврата — это два объекта, которые модели прямоугольника частично перекрывают друг друга, так что есть пересечение между краями двух прямоугольников; Если флаг consider_touch верен, координата считается содержащейся, даже если два прямоугольника касаются только вдоль стороны или угла.
template <typename T1, typename T2>
bool abuts(const T1& a, const T2& b,
           direction_2d dir)
Возвращается истинным, если прямоугольник b примыкает, но вниз не перекрывает прямоугольник a на стороне прямоугольника a, указанной dir.
template <typename T1, typename T2>
bool abuts(const T1& a, const T2& b,
           orientation_2d)
Возвращается истинным, если прямоугольник b примыкает, но вниз не перекрывает прямоугольник a по обе стороны прямоугольника a, заданного ориентацией_2d.
template <typename T1, typename T2>
bool abuts(const T1& a, const T2& b)
Возвращается истинно, если прямоугольник b примыкает, но вниз не перекрывает прямоугольник a с любой стороны.
template <typename T1, typename T2>
bool intersect(T1& a, const T2& b, orientation_2d
               bool consider_touch = true)
Устанавливает прямоугольник a на пересечение прямоугольника a и интервал b вдоль ориентации_2d и возвращается истинным.   Если интервал не пересекается, прямоугольник остается неизменным, и функция возвращается ложной.   Если флаг consider_touch — истинные интервалы, которые abut считаются пересекающимися.
template <typename T1, typename T2>
bool intersect(T1& a, const T2& b,
               bool consider_touch = true)
Устанавливает прямоугольник a на пересечение прямоугольника a и прямоугольника b и возвращает истинный.   Если два прямоугольника не пересекаются, a остается неизменным, и функция возвращается ложной.   Если флаг consider_touch — это истинные прямоугольники, которые, как считается, пересекаются.
template <typename T1, typename T2>
T& generalized_intersect(T1& a, const T2& b)
Так же, как и интерсекты, но если они не пересекаются, установите a в прямоугольник между a и b, применяя обобщенный_интерсект() на интервалах прямоугольников.
template <typename T>
T& bloat(T& rectangle, coordinate_type)
Взлеты x и y интервалов прямоугольника по координатному значению.
template <typename T>
T& bloat(T& rectangle, direction_2d, coordinate_type)
Склоны прямоугольника, определенные направлением_2d по значению координат.
template <typename T>
T& bloat(T& rectangle, orientation_2d, coordinate_type)
Интервал прямоугольника, определяемый ориентацией_2d по координатному значению.
template <typename T>
T& shrink(T& rectangle, coordinate_type)
Сокращает x и y интервалы прямоугольника по координатному значению.
template <typename T>
T& shrink(T& rectangle, direction_2d, coordinate_type)
Сокращает сторону прямоугольника, указанную направлением_2d по координатному значению.
template <typename T>
T& shrink(T& rectangle, orientation_2d, coordinate_type)
Уменьшение интервала прямоугольника, заданного ориентацией_2d по координатному значению.
template <typename T1, typename T2>
bool encompass(T1& a, const T2& b)
Интервалы x и y a должны охватывать интервалы x и y b соответственно.
template <typename T, typename point_type>
bool encompass(T& rectangle, const point_type& point)
Интервалы x и y прямоугольника должны охватывать координаты x и y точки соответственно.
template <typename T, typename interval_type>
bool encompass(T& rectangle, const interval_type& i,
               orientation_2d)
Интервал прямоугольника, указанный ориентацией_2d, должен охватывать интервал i.
template <typename T, typename point_type>
bool get_corner(point_type& point, const T& rectangle, 
                direction_2d, direction_1d)
Установки указывают на угол прямоугольника, который вы достигаете, если вы посмотрите на его сторону, указанную направлением_2d, изнутри прямоугольника и поверните в направлении_1d (низкий == левый, высокий = правый).  : Всегда возвращает правду.

Rectangle Data

В библиотеке представлена модель прямоугольной концепции, объявленной template rectangle_data где T - тип координат.

Этот тип данных используется внутри, когда необходим прямоугольник, и доступен пользователю библиотеки, который считает удобным использовать тип данных прямоугольника библиотеки вместо предоставления своих собственных.   Тип данных реализован для удобства использования с библиотечными чертами.

Members

geometry_type rectangle_concept
coordinate_type T
interval_type interval_data
rectangle_data(T xl, T yl, T xh, T yh) Построение прямоугольника с четырьмя координатами.
template <typename T1, typename T2>
rectangle_data
(const T1& horizontal_interval,
               const T2& vertical_interval)
Построение прямоугольника с двумя объектами, которые моделируют интервал.
rectangle_data(const rectangle_data& that) Копировать конструкцию
rectangle_data& operator=(const rectangle_data& that) Оператор назначения.
template <typename T2>
rectangle_data& operator=(const T2& that) const
Назначение от объекта, который является моделью прямоугольника.
template <typename T2>
bool operator==(const T2& that) const
Сравните равенство с объектом, который является моделью прямоугольника.
template <typename T2>
bool operator!=(const T2& that) const
Сравните неравенство с объектом, который является моделью прямоугольника.
interval_data<T> get(orientation_2d orient) const Получите интервал в заданной ориентации.
template <typename T2>
void set(orientation_2d orient, const T2& value)
Устанавливает интервал в заданной ориентации на значение объекта, моделирующего интервал.
 
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: Rectangle Concept раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

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