22 #include "../Config.h" 27 #include <boost/lexical_cast.hpp> 44 const std::vector< te::gm::GTParameters::TiePoint >& tiePoints,
46 double maxError )
const 48 CPPUNIT_ASSERT( transformation.
isValid() );
58 for(
unsigned int tpIdx = 0 ; tpIdx < tiePoints.size() ; ++tpIdx )
60 transformation.
directMap( tiePoints[ tpIdx ].first, dMappedCoord );
61 diffx = dMappedCoord.x - tiePoints[ tpIdx ].second.x;
62 diffy = dMappedCoord.y - tiePoints[ tpIdx ].second.y;
63 derror = sqrt( ( diffx * diffx ) + ( diffy * diffy ) );
65 transformation.
inverseMap( tiePoints[ tpIdx ].second, iMappedCoord );
66 diffx = iMappedCoord.
x - tiePoints[ tpIdx ].first.x;
67 diffy = iMappedCoord.
y - tiePoints[ tpIdx ].first.y;
68 ierror = sqrt( ( diffx * diffx ) + ( diffy * diffy ) );
70 if( derror > maxError )
74 std::cout << std::endl <<
76 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].first.x )
78 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].first.y )
80 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].second.x )
82 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].second.y )
83 +
"] was direct-mapped as [" 84 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].first.x )
86 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].first.y )
88 + boost::lexical_cast<std::string>( dMappedCoord.x )
90 + boost::lexical_cast<std::string>( dMappedCoord.y )
92 + boost::lexical_cast<std::string>( derror )
96 if( ierror > maxError )
100 std::cout << std::endl <<
102 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].first.x )
104 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].first.y )
106 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].second.x )
108 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].second.y )
109 +
"] was inverse-mapped as [" 110 + boost::lexical_cast<std::string>( iMappedCoord.
x )
112 + boost::lexical_cast<std::string>( iMappedCoord.
y )
114 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].second.x )
116 + boost::lexical_cast<std::string>( tiePoints[ tpIdx ].second.y )
118 + boost::lexical_cast<std::string>( ierror )
125 CPPUNIT_FAIL(
"Tie-points checking failed" );
131 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
133 CPPUNIT_ASSERT( transfPtr.get() != 0 );
146 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
148 CPPUNIT_ASSERT( transfPtr->getName() ==
"RST" );
150 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
155 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
157 CPPUNIT_ASSERT( transfPtr.get() != 0 );
171 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
173 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
175 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
183 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
185 CPPUNIT_ASSERT( transfPtr.get() != 0 );
197 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
198 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
200 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
202 double translationX = 0;
203 double translationY = 0;
204 double scalingFactorX = 0;
205 double scalingFactorY = 0;
212 transfPtr->getParameters().m_directParameters,
213 translationX, translationY, scalingFactorX, scalingFactorY, skew,
214 squeeze, scaling, rotation ) );
216 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, translationX, 0.00000000001 );
217 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
218 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
219 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
220 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
221 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, squeeze, 0.00000000001 );
222 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scaling, 0.00000000001 );
223 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
229 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
231 CPPUNIT_ASSERT( transfPtr.get() != 0 );
243 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
244 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
246 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
248 double translationX = 0;
249 double translationY = 0;
250 double scalingFactorX = 0;
251 double scalingFactorY = 0;
258 transfPtr->getParameters().m_directParameters,
259 translationX, translationY, scalingFactorX, scalingFactorY, skew,
260 squeeze, scaling, rotation ) );
262 CPPUNIT_ASSERT_DOUBLES_EQUAL( -1.0, translationX, 0.00000000001 );
263 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
264 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
265 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
266 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
267 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, squeeze, 0.00000000001 );
268 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scaling, 0.00000000001 );
269 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
275 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
277 CPPUNIT_ASSERT( transfPtr.get() != 0 );
289 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
290 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
292 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
294 double translationX = 0;
295 double translationY = 0;
296 double scalingFactorX = 0;
297 double scalingFactorY = 0;
304 transfPtr->getParameters().m_directParameters,
305 translationX, translationY, scalingFactorX, scalingFactorY, skew,
306 squeeze, scaling, rotation ) );
308 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
309 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, translationY, 0.00000000001 );
310 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
311 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
312 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
313 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, squeeze, 0.00000000001 );
314 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scaling, 0.00000000001 );
315 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
321 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
323 CPPUNIT_ASSERT( transfPtr.get() != 0 );
335 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
336 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
338 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
340 double translationX = 0;
341 double translationY = 0;
342 double scalingFactorX = 0;
343 double scalingFactorY = 0;
350 transfPtr->getParameters().m_directParameters,
351 translationX, translationY, scalingFactorX, scalingFactorY, skew,
352 squeeze, scaling, rotation ) );
354 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
355 CPPUNIT_ASSERT_DOUBLES_EQUAL( -1.0, translationY, 0.00000000001 );
356 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
357 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
358 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
359 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, squeeze, 0.00000000001 );
360 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scaling, 0.00000000001 );
361 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
367 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
369 CPPUNIT_ASSERT( transfPtr.get() != 0 );
381 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
382 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
384 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
386 double translationX = 0;
387 double translationY = 0;
388 double scalingFactorX = 0;
389 double scalingFactorY = 0;
396 transfPtr->getParameters().m_directParameters,
397 translationX, translationY, scalingFactorX, scalingFactorY, skew,
398 squeeze, scaling, rotation ) );
400 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
401 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
402 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
403 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
404 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
405 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, squeeze, 0.00000000001 );
406 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scaling, 0.00000000001 );
407 CPPUNIT_ASSERT_DOUBLES_EQUAL( -1.570796, rotation, 0.001 );
413 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
415 CPPUNIT_ASSERT( transfPtr.get() != 0 );
427 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
428 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
430 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
432 double translationX = 0;
433 double translationY = 0;
434 double scalingFactorX = 0;
435 double scalingFactorY = 0;
442 transfPtr->getParameters().m_directParameters,
443 translationX, translationY, scalingFactorX, scalingFactorY, skew,
444 squeeze, scaling, rotation ) );
446 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
447 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
448 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
449 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
450 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
451 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, squeeze, 0.00000000001 );
452 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scaling, 0.00000000001 );
453 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.570796, rotation, 0.001 );
459 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
461 CPPUNIT_ASSERT( transfPtr.get() != 0 );
473 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
474 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
476 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
478 double translationX = 0;
479 double translationY = 0;
480 double scalingFactorX = 0;
481 double scalingFactorY = 0;
488 transfPtr->getParameters().m_directParameters,
489 translationX, translationY, scalingFactorX, scalingFactorY, skew,
490 squeeze, scaling, rotation ) );
492 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
493 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
494 CPPUNIT_ASSERT_DOUBLES_EQUAL( 2.0, scalingFactorX, 0.00000000001 );
495 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
496 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
497 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.414213, squeeze, 0.0001 );
498 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.414213, scaling, 0.0001 );
499 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
505 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
507 CPPUNIT_ASSERT( transfPtr.get() != 0 );
519 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
520 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
522 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
524 double translationX = 0;
525 double translationY = 0;
526 double scalingFactorX = 0;
527 double scalingFactorY = 0;
534 transfPtr->getParameters().m_directParameters,
535 translationX, translationY, scalingFactorX, scalingFactorY, skew,
536 squeeze, scaling, rotation ) );
538 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
539 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
540 CPPUNIT_ASSERT_DOUBLES_EQUAL( 2.0, scalingFactorX, 0.00000000001 );
541 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorY, 0.00000000001 );
542 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
543 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.707106, squeeze, 0.0001 );
544 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.414213, scaling, 0.0001 );
545 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
551 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
553 CPPUNIT_ASSERT( transfPtr.get() != 0 );
565 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
566 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
568 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
570 double translationX = 0;
571 double translationY = 0;
572 double scalingFactorX = 0;
573 double scalingFactorY = 0;
580 transfPtr->getParameters().m_directParameters,
581 translationX, translationY, scalingFactorX, scalingFactorY, skew,
582 squeeze, scaling, rotation ) );
584 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
585 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
586 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
587 CPPUNIT_ASSERT_DOUBLES_EQUAL( 2.0, scalingFactorY, 0.00000000001 );
588 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
589 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.707106, squeeze, 0.0001 );
590 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.414213, scaling, 0.0001 );
591 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
597 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
599 CPPUNIT_ASSERT( transfPtr.get() != 0 );
611 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
612 CPPUNIT_ASSERT( transfPtr->getName() ==
"Affine" );
614 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
616 double translationX = 0;
617 double translationY = 0;
618 double scalingFactorX = 0;
619 double scalingFactorY = 0;
626 transfPtr->getParameters().m_directParameters,
627 translationX, translationY, scalingFactorX, scalingFactorY, skew,
628 squeeze, scaling, rotation ) );
630 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationX, 0.00000000001 );
631 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, translationY, 0.00000000001 );
632 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, scalingFactorX, 0.00000000001 );
633 CPPUNIT_ASSERT_DOUBLES_EQUAL( 2.0, scalingFactorY, 0.00000000001 );
634 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, skew, 0.00000000001 );
635 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.414213, squeeze, 0.0001 );
636 CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.414213, scaling, 0.0001 );
637 CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, rotation, 0.00000000001 );
644 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
646 CPPUNIT_ASSERT( transfPtr.get() != 0 );
666 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
668 CPPUNIT_ASSERT( transfPtr->getName() ==
"SecondDegreePolynomial" );
670 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
674 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
676 CPPUNIT_ASSERT( transfPtr.get() != 0 );
696 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
698 CPPUNIT_ASSERT( transfPtr->getName() ==
"SecondDegreePolynomial" );
700 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
707 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
709 CPPUNIT_ASSERT( transfPtr.get() != 0 );
738 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
740 CPPUNIT_ASSERT( transfPtr->getName() ==
"ThirdDegreePolynomial" );
742 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
746 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
748 CPPUNIT_ASSERT( transfPtr.get() != 0 );
777 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
779 CPPUNIT_ASSERT( transfPtr->getName() ==
"ThirdDegreePolynomial" );
781 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
787 std::unique_ptr< te::gm::GeometricTransformation > transfPtr(
789 CPPUNIT_ASSERT( transfPtr.get() != 0 );
803 CPPUNIT_ASSERT( transfPtr->initialize( transfParams ) );
805 CPPUNIT_ASSERT( transfPtr->getName() ==
"Projective" );
807 testTiePoints( transfParams.m_tiePoints, *transfPtr, 0.00001 );
std::vector< TiePoint > m_tiePoints
Tie points.
An utility struct for representing 2D coordinates.
std::pair< Coord2D, Coord2D > TiePoint
Tie point type definition.
static bool decompose(const std::vector< double > &transfParams, double &translationX, double &translationY, double &scalingFactorX, double &scalingFactorY, double &skew, double &squeeze, double &scaling, double &rotation)
Returns the basic set of transform parameters given by the decomposition of a given affine transforma...
static GeometricTransformation * make(const std::string &factoryKey)
It creates an object with the appropriated factory.
2D Geometric transformation parameters.
This file contains include headers for the Vector Geometry model of TerraLib.