Использование, модификация и распространение подлежат лицензии Boost Software,
Версия 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копия на
http://www.boost.org/LICENSE_1_0.txt
*/
#include
#include
namespace gtl = импульс::polygon;
//просто небольшое мета-программирование, чтобы получить вещи на правой ноге
шаблон
struct lookup_polygon_set_type { typedef gtl::polygon_set_data type; };
шаблон
struct lookup_polygon_set_type {
typedef gtl::polygon_90_set_data type; };
// Эта функция работает как с 90, так и с общими версиями
// свойств слияния/карты алгоритм наложения
шаблон
{
std::vector test_data;
test_data.push_back(gtl::rectangle_data(11, 10, 31, 30));
test_data.push_back(gtl::rectangle_data(1, 0, 21, 20));
test_data.push_back(gtl::rectangle_data(6, 15, 16, 25));
pm_type pm;
/insert нашу тестовую геометрию в алгоритм слияния свойств
for(unsigned int i = 0; i < test_data.size(); ++i) {
pm.insert(test_data[i], i); //notice I use the index as the
стоимость недвижимости
}
typedef name lookup_polygon_set_type::type polygon_set_type;
typedef std::map, polygon_set_type>
property_merge_result_type;
std::set key;
// Существует 8 различных комбинаций нашей входной геометрии
Комбинация //null не интересна, поэтому действительно 7
//леты перечисляют боролеиновые комбинации входов (придерживаться на шляпах)
for(unsigned int i = 0; i < 8; ++i) {
bool bits [3] = {i & 1, i & 2, i & 4};
polygon_set_type test_set;
std::set key;
для (неподписан int j = 0; j < 3; ++j) {
if(bits[j]) {
key.insert(key.end(), j);
test_set += test_data[j];
br>
}
для (неподписан int j = 0; j < 3; ++j) {
if(bits[j]) {
test_set *= test_data[j];
br>
}
для (неподписан int j = 0; j < 3; ++j) {
если(!bits[j])
test_set -= test_data[j];
}
если(test_set.empty())) {
// Только нулевая комбинация не должна существовать
(i == 0);
// Сочетание, которое не существует, не должно
// Присутствовать в результате
(result.find(key) == result.end());
} elsebr>
claim(gtl::equivalence(result(key), test_set));
}
}
//Notice that we have to do O(2^n) booleans to compose the same
// Результат, который производится в одном проходе собственности, сливается
//given n входных слоев (8 = 2^3 в данном примере)
}
int main() {
test_pm ();
test_pm();
возврат 0;
}
//Теперь вы знаете, как использовать манхаттан и произвольное свойство угла
Алгоритмы /merge для выполнения наложения карты на n слоях входной геометрии
Статья Property Merge Usage раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.