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

Boost Polygon Library: Interval Concept

Boost , ,


Interval Concept

Интервал концептуальный тег интервал_концепция

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

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

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

Ниже показаны характеристики интервала по умолчанию. Специализация этих признаков требуется для типов, которые не соответствуют по умолчанию.

template
struct interval_traits {
  typedef typename T::coordinate_type coordinate_type;

  static inline coordinate_type get(const T& interval, direction_1d dir) {
    return interval.get(dir);
  }
};

template <typename T>
struct interval_mutable_traits {
 
typedef typename T::coordinate_type coordinate_type;

  static inline void set(T& interval, direction_1d dir,

                         typename interval_traits<T>::coordinate_type value) {
    interval.set(dir, value);
  }
  static inline T construct(typename interval_traits<T>::coordinate_type low_value,
                            typename interval_traits<T>::coordinate_type high_value) {
    return T(low_value, high_value);
  }
};
[ORIG_END] -->

Functions

template <typename T>
coordinate_type get(const T& interval, direction_1d)
Ожидает модель интервала.   Возвращает низкую или высокую координату интервала в зависимости от направления_1d.
 
template <typename T, typename coordinate_type>
void set(T& interval, direction_1d, coordinate_type)
Ожидает модель интервала.    Устанавливает низкую или высокую координату интервала на координату в зависимости от направления_1d.   Если после этого изменения низкое значение будет больше высокого, то оба значения задаются на входное значение координат.
template <typename T>
T construct(coordinate_type low, coordinate_type high)
Постройте объект, который является моделью интервала с заданными низкими и высокими значениями координат.
template <typename T1, typename T2>
T1& assign(T1& left, const T2& right)
Копирует данные с правого объекта, который моделирует интервал, на левый объект, который моделирует интервал.
template <typename T, typename T2>
bool equivalence(const T& interval1, const T2& interval2)
Учитывая два объекта, которые моделируют интервал, сравнивают и возвращают истинное, если их низкие и высокие значения соответственно равны друг другу.
template <typename T>
bool contains(const T&, coordinate_type,
              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, даже если он равен концу a.
template <typename interval_type>
coordinate_type low(const interval_type& interval)
Возвращает нижний конец объекта, который моделирует интервал.
template <typename interval_type>
coordinate_type high(const interval_type& interval)
Возвращает высокий конец объекта, который моделирует интервал.
// get the center coordinate
template <typename interval_type>
coordinate_type center(const interval_type& interval)
Возвращает центральную координату объекта, моделирующего интервал.
template <typename interval_type>
void low(interval_type& interval, coordinate_type )
Устанавливает нижний конец объекта, который моделирует интервал к значению координат.   Если нижний конец будет установлен на больший, чем верхний, то оба будут установлены на значение координаты.
template <typename interval_type>
void high(interval_type& interval, coordinate_type )
Устанавливает высокий конец объекта, который моделирует интервал к значению координат.   Если верхний конец будет установлен меньше, чем нижний, то оба будут установлены на значение координаты.
template <typename interval_type>
coordinate_difference delta(const interval_type& interval)
Возвращает расстояние от низкого до высокого конца объекта, который моделирует интервал.
template <typename interval_type>
interval_type& flip(interval_type& interval,
                    coordinate_type axis = 0)
Переворачивает объект, который моделирует интервал вокруг координат оси.   Если оси не предусмотрено, интервал переворачивается через происхождение.
template <typename interval_type>
interval_type& scale_up(interval_type& interval,
                        unsigned_area_type factor)
Умножает низкие и высокие концы объекта, которые моделируют интервал по неподписанному фактору.
template <typename interval_type>
interval_type& scale_down(interval_type& interval,
                          unsigned_area_type factor)
Разделяет низкие и высокие концы объекта, которые моделируют интервал по неподписанному фактору.
template <typename interval_type>
interval_type& scale(interval_type& interval,
                     double factor)
Умножает низкие и высокие концы объекта, которые моделируют интервал по значению плавающей точки.
template <typename interval_type>
interval_type& move(interval_type& interval,
                    coordinate_difference displacement)
Добавляет значение смещения к низким и высоким концам объекта, которые моделируют интервал.
template <typename interval_type>
interval_type& convolve(interval_type& interval,
                        coordinate_type b)
Добавляет значение координат к низким и высоким концам объекта, которые моделируют интервал.
template <typename interval_type>
interval_type& deconvolve(interval_type& interval,
                          coordinate_type b)
Вычитает значение координат с низких и высоких концов объекта, моделирующего интервал.
template <typename T1, typename T2>
T1& convolve(T1& a, const T2& b)
Добавляет низкий конец b к низкому концу a и добавляет высокий конец b к высокому концу a.
template <typename T1, typename T2>
T1& deconvolve(T1& a, const T2& b)
Вычитает низкий конец b из низкого конца a и вычитает высокий конец b из высокого конца a.
template <typename T1, typename T2>
T1& reflected_convolve(T1& a, const T2& b)
Добавляет высокий конец b к низкому концу a и добавляет низкий конец b к высокому концу a.
template <typename T1, typename T2>
T1& reflected_deconvolve(T1& a, const T2& b)
Вычитает высокий конец b из низкого конца a и вычитает низкий конец b из высокого конца a.
template <typename T>
coordinate_difference euclidean_distance(const T&,
                      coordinate_type)
Возвращает расстояние от объекта, моделирующего интервал, к координате.   Возвращает ноль, если координата равна концу интервала или содержится в интервале.
template <typename T1, typename T2>
bool intersects(const T1& interval, const T2& b,
                bool consider_touch = true)
Возвращается истинно, если два объекта, которые модели интервал перекрываются.   Если флаг consider_touch является истинным касанием в конечных точках, это считается перекрытием.
template <typename T1, typename T2>
bool boundaries_intersect(const T1& interval, const T2& b,
                          bool consider_touch = true)
Верно возвращение двух объектов, которые частично перекрывают интервал модели так, что одна конечная точка каждого из них содержится в другой.   Если флаг consider_touch является истинным, координата считается содержащейся, даже если она равна концу.
template <typename T1, typename T2>
bool abuts(const T1& a, const T2& b,
           direction_1d dir)
Возвращается истинно, если интервал b примыкает, но вниз не перекрывает интервал a на конце интервала a, указанного dir.
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,
               bool consider_touch = true)
Устанавливает интервал a на пересечение интервала a и интервала b и возвращает истинное значение.   Если два интервала не пересекаются, интервал a не изменяется, и функция возвращается ложной.   Если флаг consider_touch — истинные интервалы, которые abut считаются пересекающимися.
template <typename T1, typename T2>
T& generalized_intersect(T1& a, const T2& b)
Так же, как и пересекаются, но если они не пересекаются, устанавливают интервал между a и b.
template <typename T>
T& bloat(T& interval, coordinate_type)
Добавляет значение координат к высокому концу интервала и вычитает его из низкого конца интервала.
template <typename T>
T& bloat(T& interval, direction_1d, coordinate_type)
Добавляет значение координат к высокому концу интервала или вычитает его из низкого конца интервала в зависимости от направления_1d.
template <typename T>
T& shrink(T& interval, coordinate_type)
Вычитает значение координат с высокого конца интервала и добавляет его к низкому концу интервала.
template <typename T>
T& shrink(T& interval, direction_1d, coordinate_type)
Вычитает значение координат с высокого конца интервала или добавляет его к низкому концу интервала в зависимости от направления_1d.
template <typename T1, typename T2>
bool encompass(T1& a, const T2& b)
Устанавливает низкий от а до мин, низкий от а и низкий от b и устанавливает высокий от а до максимума, высокий от a и высокий от b.  Возвращается истинно, если b не содержалось в a для начала.
template <typename T>
bool encompass(T& a, coordinate_type)
Устанавливает низкое значение от а до мин с низким значением координаты и устанавливает высокое значение от а до максимума с высоким значением координаты.   Возвращается истинно, если значение координат не содержалось в а для начала.

Interval Data

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

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

Members

geometry_type interval_concept
coordinate_type T
interval_data() По умолчанию построены два значения координат интервала.
interval_data(T low, T high) Построение интервала с двумя координатами.
interval_data(const interval_data& that) Копировать конструкцию
interval_data& operator=(const interval_data& that) Оператор назначения.
template <typename IntervalType> 
interval_data& operator=(
const IntervalType& that) const
Назначение от объекта, являющегося моделью интервала.
bool operator==(const interval_data& that) const Перегрузка оператора равенства.
bool operator!=(const interval_data& that) const Перегрузка оператора неравенства.
bool operator<(const interval_data& that) const Сравнение низких координат и высоких координат для разрыва связей.
bool operator<=(const interval_data& that) const Сравнение низких координат и высоких координат для разрыва связей.
bool operator>(const interval_data& that) const Сравнение низких координат и высоких координат для разрыва связей.
bool operator>=(const interval_data& that) const Сравнение низких координат и высоких координат для разрыва связей.
T get(direction_1d dir) const Получите координату в заданном направлении.
T low() const Retrieves the low value.
T high() const Retrieves the high endpoint.
void set(direction_1d dir, T value) Устанавливает координату в заданном направлении на значение.
interval_data& low(T value) Sets the low value.
interval_data& high(T value) Sets the high 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: Interval Concept раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

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