// Boost.Geometry (aka GGL, Generic Geometry Library) // Unit Test // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // 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 #include #include #include #include #include #include #include #include BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian) BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian) template void check_inverse(P const& p, T const& trans) { typedef typename bg::coordinate_type

::type coordinate_type; const std::size_t dim = bg::dimension

::value; bg::strategy::transform::inverse_transformer inverse(trans); P i; bg::transform(p, i, inverse); BOOST_CHECK_CLOSE(double(bg::get<0>(i)), 1.0, 0.001); BOOST_CHECK_CLOSE(double(bg::get<1>(i)), 1.0, 0.001); } template void test_all() { typedef typename bg::coordinate_type

::type coordinate_type; const std::size_t dim = bg::dimension

::value; P p; bg::assign_values(p, 1, 1); { bg::strategy::transform::translate_transformer trans(1, 1); P tp; bg::transform(p, tp, trans); BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 2.0, 0.001); BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), 2.0, 0.001); check_inverse(tp, trans); } { bg::strategy::transform::scale_transformer trans(10, 10); P tp; bg::transform(p, tp, trans); BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 10.0, 0.001); BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), 10.0, 0.001); check_inverse(tp, trans); } { bg::strategy::transform::rotate_transformer trans(90.0); P tp; bg::transform(p, tp, trans); BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 1.0, 0.001); BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), -1.0, 0.001); check_inverse(tp, trans); } { // Map from 0,0,2,2 to 0,0,500,500 bg::strategy::transform::map_transformer trans ( 0.0, 0.0, 2.0, 2.0, 500, 500 ); P tp; bg::transform(p, tp, trans); BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 250.0, 0.001); BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), 250.0, 0.001); check_inverse(tp, trans); } } int test_main(int, char* []) { //test_all(); //test_all(); //test_all(); test_all >(); //test_all >(); test_all >(); test_all >(); return 0; }