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

Custom Polygon

Boost , ,

/*
Авторское право 2008 Intel Corporation

На использование, модификацию и распространение распространяется лицензия Boost Software License,
Version 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копию по адресу
http://www.boost.org/LICENSE_1_0.txt).
*/
#include
#include
#include
namespace gtl = boost::polygon;
с использованием усилителя пространства имен::полигон::операторы;

// Сначала давайте превратим наш код использования многоугольника в общий
// функцию, параметризованную типом многоугольника
шаблон
void test_polygon() {
  //lets build a 10x10 rectangle shaped polygon
  typedef typename gtl::polygon_traits::point_type Точка;
  Точка pts[] = {gtl::construct(0,0),
 gtl::construct(10,0),
 gtl::construct(10,10),
 gtl::construct(0,10),
 Polygon poly;
  gtl::set_points(poly, pts, pts+4);

  //Теперь посмотрим, что мы можем сделать с этим многоугольником
  assert(gtl::area(poly) == 100.0f);
  assert(gtl::contains(poly, gtl::construct(5, 5)));
  assert(!gtl::contains(poly, gtl::construct(15, 5)));
  gtl::rectangle_datarect;
  assert(gtl::extents(rect, poly)); //get bounding box of poly
  assert(gtl::equivalence(rect, poly)); //hey, that's slick
  assert(gtl::winding(poly) == gtl::COUNTERCLOCKWISE);
  assert(gtl::perimeter(poly) == 40.0f);

  //добавить 5 ко всем коордам поли
  gtl::convolve(poly, gtl::construct(5, 5));
  //multiply all coords of poly by 2
  gtl::scale_up(poly, 2);
  gtl::set_points(rect, gtl::point_data(10, 10),
  gtl::point_data(30, 30));
  assert(gtl::equivalence(poly, rect));
}

Теперь давайте объявим наш собственный класс многоугольников
//Oops, нам нужен класс точек для поддержки нашего многоугольника, давайте позаимствуем
// Пример CPoint
struct CPoint {
  int x;
  int y;
};

// Мы должны заставить CPoint работать с бустерным полигоном, чтобы сделать наш полигон
// который использует CPoint для работы с усилителем полигона
namespace boost {namespace polygon {
  template<>
 struct geometry_concept{ typedef point_concept type; };
  template<>
 struct point_traits{
   typedef int coordinate_type;

    static inline coordinate_type get(const CPoint& point,
    Ориентация_2d orient) {
             
     
    }
  };

  template<>
 struct point_mutable_traits{
   typedef int coordinate_type;

    static inline void set(CPoint& point, orientation_2d orient, int value) {
        point.x = value;
     
       point.y = значение;
     }
     CPoint retval;
       retval.x = x_value;
       retval.y = y_value;
        
    }
  };
}

// Я ленивый и использую стил везде, чтобы избежать написания моих собственных классов
//Мой игрушечный полигон — std::list< CPoint>
typedef std::listCPolygon;

// Нам нужно специализировать наше многоугольное концептуальное отображение в бустерном многоугольнике
namespace boost {namespace polygon {
  //first register CPolygon as a polygon_concept type
  template<>
  struct geometry_concept{ typedef polygon_concept type; };

  template<>
 struct polygon_traits{
   typedef int coordinate_type;
    typedef CPolygon::const_iterator iterator_type
    typedef CPoint point_type;

    // Получить начальный итератор
    static inline iterator_type start_points (const CPolygon&t) {
      возврат t.begin();
   

    // Получить конечный итератор
    статичный inline iterator_type end_points(const CPolygon&t) {
      возврат t.end();
     // Получить количество сторон полигона
    static inline std::size_t size(const CPolygon&t) {
      
   

    // Получить направление обмотки полигона
    static inline winding_direction winding(const CPolygon&t) {
      
    }
  };

  template<>
 struct polygon_mutable_traits{
    //expects stl style iterators
                                                   
      возврат t;
    }

  }
}

Теперь не остается ничего, кроме как проверить, что наш многоугольник
// Работа с библиотечными интерфейсами
int main() {
  test_polygon(); //woot!
  возврат 0;
}
 

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)

Статья Custom Polygon раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:22:57/0.025327920913696/1