123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // Boost.Geometry Index
- // Additional tests
- // Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
- // Use, modification and distribution is subject to 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)
- #include <iostream>
- #include <boost/geometry.hpp>
- #include <boost/geometry/index/rtree.hpp>
- #include <boost/chrono.hpp>
- #include <boost/foreach.hpp>
- #include <boost/random.hpp>
- #include <set>
- int main()
- {
- namespace bg = boost::geometry;
- namespace bgi = bg::index;
- typedef boost::chrono::thread_clock clock_t;
- typedef boost::chrono::duration<float> dur_t;
- size_t stored_count = 100000;
- std::vector< std::pair<float, float> > coords;
- //randomize values
- {
- boost::mt19937 rng;
- //rng.seed(static_cast<unsigned int>(std::time(0)));
- float max_val = static_cast<float>(stored_count / 10);
- boost::uniform_real<float> range(-max_val, max_val);
- boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > rnd(rng, range);
- coords.reserve(stored_count);
- std::cout << "randomizing data\n";
- for ( size_t i = 0 ; i < stored_count ; ++i )
- {
- coords.push_back(std::make_pair(rnd(), rnd()));
- }
- std::cout << "randomized\n";
- }
- typedef bg::model::point<float, 2, bg::cs::cartesian> P;
- typedef bgi::rtree<P, bgi::dynamic_linear > RTL;
- typedef bgi::rtree<P, bgi::dynamic_quadratic > RTQ;
- typedef bgi::rtree<P, bgi::dynamic_rstar > RTR;
- for ( size_t m = 4 ; m < 33 ; m += 2 )
- {
- size_t mm = ::ceil(m / 3.0f);
- RTL rtl(bgi::dynamic_linear(m, mm));
- RTQ rtq(bgi::dynamic_quadratic(m, mm));
- RTR rtr(bgi::dynamic_rstar(m, mm));
- std::cout << m << ' ' << mm << ' ';
- // inserting test
- {
- clock_t::time_point start = clock_t::now();
- for (size_t i = 0 ; i < stored_count ; ++i )
- {
- P p(coords[i].first, coords[i].second);
- rtl.insert(p);
- }
- dur_t time = clock_t::now() - start;
- std::cout << time.count() << ' ';
- start = clock_t::now();
- for (size_t i = 0 ; i < stored_count ; ++i )
- {
- P p(coords[i].first, coords[i].second);
- rtq.insert(p);
- }
- time = clock_t::now() - start;
- std::cout << time.count() << ' ';
- start = clock_t::now();
- for (size_t i = 0 ; i < stored_count ; ++i )
- {
- float v = i / 100.0f;
- P p(coords[i].first, coords[i].second);
- rtr.insert(p);
- }
- time = clock_t::now() - start;
- std::cout << time.count() << ' ';
- }
- std::cout << '\n';
- }
- return 0;
- }
|