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

Custom Polygon Set

Boost , ,

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

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


/Снова мы делаем использование библиотеки дженерик
// и параметризируйте его на многоугольном наборе типа
шаблон
null test_polygon_set(){
  с использованием пространства имен gtl;
  Polygon Настройка ps;
  ps += rectangle_data(0, 0, 10, 10);
  PolygonSet ps2;
  ps2 += rectangle_data(5, 5, 15, 15);
  PolygonSet ps3;

  PolygonSet ps4;
  ps4 += ps + ps2;
  claim(area(ps4) == area(ps) + area(ps2) - area(ps3));
  claim(equivalence(ps + ps2) - (ps * ps2), ps ^ ps2)   rectangle_data rect;
  claim(extents(rect, ps ^ ps2));
  claim(area(rect) == 225);
  claim(area(rect ^(ps ^ ps2)) == area(rect) - area(ps ^ ps2));
}

// Первое, что нужно сделать, пусть включает весь код из предыдущих примеров

// Пример CPoint
CPoint {
  int x;
  y;
};

{ многоугольник пространства имен {
  шаблон <>
  struct geo_concept { typedef point_concept type; };
  шаблон <>
  struct point_traits {
      typedef int coordinate_type;

     статическая встроенная координация_type get(const CPoint& point,
                           orientation_2d orient) {
      if(orient == HORIZONTAL)
     точка возврата.x;
     return point.y;
    }
  };

  шаблон <>
  struct point_mutable_traits {
      typedef int coordinate_type;

     статический встроенный набор пустот (CPoint& point, orientation_2d orient, {
      if(orient == HORIZONTAL)
       point.x= value;
     
       point.y= value;
    }
     статический конструкт CPoint(int x_ value, int y_value) {
     CPoint Reval;
     retval.x = x_ value;
     retval.y = y_ value;
     возвратный возврат;
    }
  };
}br>
// Пример CPolygon
typedef std::list CPolygon;

// Нам нужно специализировать наше картирование полигонной концепции в бульоне многоугольника
{ многоугольник пространства имен {
  //Первый регистр CPolygon как тип полигон_концепции
  шаблон <>
  struct geo_concept{ typedef polygon_concept type;};

  шаблон <>
  struct polygon_traits br>       typedef int coordinate_type;
   Типdef; CPolygon::const_iterator_type;
   typedef CPoint_type;

    // Получить стартовый итератор
     статический итератор_type start_points(const CPolygon& t) {
     возврат t.begin();
    }

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

    // Получить количество сторон полигона
     статичный встроенный std::размер_t(const CPolygon& t) {
     возврат t.size();
    }

    // Получить направление намотки полигона
      статичный встроенный ветренный виток_направления (Const CPolygon & t) {
     возврат неизвестен;
    }
  };

  шаблон <>
  struct polygon_mutable_traits br>    //expects stl Style iterators
   шаблон
     статический встроенный CPolygon& set_points(CPolygon& t,
                           iT input_begin, iT input_end){
      t.clear();
     (input_begin!= input_end) {
       t.push_back(CPoint());
       gtl::assign(t.back(), *input_begin);
       ++input_begin;
      br>      возврат t;
    }

  };
}br>
//Хорошо, наконец-то мы объявим свой собственный многоугольный набор типа
typedef std::deque CPolygonSet;

//deque не является автоматически многоугольником в библиотеке
// Потому что это стандартный контейнер, есть ярлык
/ Для отображения его на полигонную концепцию, но я сделаю это
// длинный путь, который вы используете в общем случае.
{ многоугольник пространства имен {
  // Сначала мы регистрируем CPolygon Набор как многоугольный набор
  шаблон <>
  struct geo_concept { typedef polygon_set_concept type; };

  //Следует за тем, чтобы мы отображали понятие через черты
  шаблон <>
  struct polygon_set_traits br>       typedef int coordinate_type;
   Типdef; CPolygonSet::const_iterator_type;
   Типdef CPolygonSet Оператор_arg_type;

     статичный inline iterator_type start(const CPolygonSet& {
     return polygon_set.begin();
    }

     статичный итератор_type end(const CPolygonSet& {
     return polygon_set.end();
    }

     // Не волнуйтесь об этом, просто верните ложные из них
      статичный встроенный стержень (const CPolygonSet& polygon_set) { возврат ложный; }
      статичный inline bool отсортированный (Const CPolygonSet& polygon_set) { возврат ложный; }
  };

  шаблон <>
  struct polygon_set_mutable_traits br>    шаблон
     статический встроенный набор пустот (CPolygonSet& polygon_set, input_iterator_type input_begin, input_iterator_type input_end      polygon_set.clear();
      // Это как бы чучело. Я копирую Неизвестная геометрия ввода
     /в мой собственный многоугольный набор, а затем вызов популировать
    /deque
     polygon_set_data ps;
      ps.insert(input_begin, input_end);
      ps.get(polygon_set);
      // Если у вас был свой собственный многоугольник с нечетным мячом , вероятно, будет
      // Итерировать через каждый полигон в данный момент и сделать что-то
      //extra
    }
  };
}br>
int main() {
  длинный c1 = часы ();
  для(int i = 0; i < 1000; ++i)
   test_polygon_set();
  длинный c2 = часы ();
  для(int i = 0; i < 1000; ++i)
   test_polygon_set();
  длинный c3 = часы ();
  длинный diff1 = c2 - c1;
  длинный diff2 = c3 - c2;
  if(diff1 > 0 & & diff2)
   std::cout << < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < поплавок (diff1)/float(diff2) < < < < < > > > , < < на < < X > > быстрее, чем настраиваемый полигонный значок CPolygon > > << std::endl;
 
   std::cout << < < < < < < < < < < < < < < < < < < > > > , << std::endl;
  возврат 0;
}

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

Copyright: 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 Set раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

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