MOAB: Mesh Oriented datABase
(version 5.4.1)
|
Go to the source code of this file.
Defines | |
#define | ASSERT_VECTORS_EQUAL(A, B) assert_vectors_equal( ( A ), ( B ), #A, #B, __LINE__ ) |
#define | ASSERT_DOUBLES_EQUAL(A, B) assert_doubles_equal( ( A ), ( B ), #A, #B, __LINE__ ) |
#define | ASSERT(B) assert_bool( ( B ), #B, __LINE__ ) |
Functions | |
void | assert_vectors_equal (const double *a, const double *b, const char *sa, const char *sb, int lineno) |
void | assert_vectors_equal (const CartVect &a, const CartVect &b, const char *sa, const char *sb, int lineno) |
void | assert_doubles_equal (double a, double b, const char *sa, const char *sb, int lineno) |
void | assert_bool (bool b, const char *sb, int lineno) |
void | test_none () |
void | test_translation () |
void | test_rotation () |
void | test_rotation_from_vec () |
CartVect | refl (const CartVect &vect, const CartVect &norm) |
void | test_reflection () |
void | test_scale () |
void | test_scale_point () |
void | test_accumulate () |
void | test_inversion () |
void | test_is_reflection () |
int | main () |
Variables | |
const double | TOL = 1e-6 |
int | error_count = 0 |
const CartVect | point1 (0.0, 0.0, 0.0) |
const CartVect | point2 (3.5, 1000,-200) |
const CartVect | vect1 (0.0, 0.0,-100.0) |
const CartVect | vect2 (1.0, 0.0, 1.0) |
#define ASSERT | ( | B | ) | assert_bool( ( B ), #B, __LINE__ ) |
Definition at line 78 of file affinexform_test.cpp.
Referenced by test_is_reflection(), and test_scale().
#define ASSERT_DOUBLES_EQUAL | ( | A, | |
B | |||
) | assert_doubles_equal( ( A ), ( B ), #A, #B, __LINE__ ) |
Definition at line 77 of file affinexform_test.cpp.
Referenced by test_reflection(), test_rotation(), and test_rotation_from_vec().
#define ASSERT_VECTORS_EQUAL | ( | A, | |
B | |||
) | assert_vectors_equal( ( A ), ( B ), #A, #B, __LINE__ ) |
Definition at line 76 of file affinexform_test.cpp.
Referenced by test_accumulate(), test_inversion(), test_none(), test_reflection(), test_rotation(), test_rotation_from_vec(), test_scale(), test_scale_point(), and test_translation().
void assert_bool | ( | bool | b, |
const char * | sb, | ||
int | lineno | ||
) |
Definition at line 112 of file affinexform_test.cpp.
References error_count.
{ if( !b ) { std::cerr << "Assertion failed at line " << lineno << std::endl << "\t" << sb << std::endl; ++error_count; } }
void assert_doubles_equal | ( | double | a, |
double | b, | ||
const char * | sa, | ||
const char * | sb, | ||
int | lineno | ||
) |
Definition at line 101 of file affinexform_test.cpp.
References error_count, and TOL.
{ if( fabs( a - b ) > TOL ) { std::cerr << "Assertion failed at line " << lineno << std::endl << "\t" << sa << " == " << sb << std::endl << "\t" << a << " == " << b << std::endl; ++error_count; } }
void assert_vectors_equal | ( | const double * | a, |
const double * | b, | ||
const char * | sa, | ||
const char * | sb, | ||
int | lineno | ||
) |
Definition at line 84 of file affinexform_test.cpp.
References error_count, and TOL.
Referenced by assert_vectors_equal().
{ if( fabs( a[0] - b[0] ) > TOL || fabs( a[1] - b[1] ) > TOL || fabs( a[2] - b[2] ) > TOL ) { std::cerr << "Assertion failed at line " << lineno << std::endl << "\t" << sa << " == " << sb << std::endl << "\t[" << a[0] << ", " << a[1] << ", " << a[2] << "] == [" << b[0] << ", " << b[1] << ", " << b[2] << "]" << std::endl; ++error_count; } }
void assert_vectors_equal | ( | const CartVect & | a, |
const CartVect & | b, | ||
const char * | sa, | ||
const char * | sb, | ||
int | lineno | ||
) |
Definition at line 96 of file affinexform_test.cpp.
References moab::CartVect::array(), and assert_vectors_equal().
{ assert_vectors_equal( a.array(), b.array(), sa, sb, lineno ); }
int main | ( | ) |
Definition at line 481 of file affinexform_test.cpp.
References error_count, test_accumulate(), test_inversion(), test_is_reflection(), test_none(), test_reflection(), test_rotation(), test_rotation_from_vec(), test_scale(), test_scale_point(), and test_translation().
{ test_none(); test_translation(); test_rotation(); test_reflection(); test_rotation_from_vec(); test_scale(); test_scale_point(); test_accumulate(); test_inversion(); test_is_reflection(); return error_count; }
Definition at line 265 of file affinexform_test.cpp.
References moab::CartVect::normalize().
Referenced by test_accumulate(), test_inversion(), and test_reflection().
{ CartVect n( norm ); n.normalize(); double d = vect % n; return vect - 2 * d * n; }
void test_accumulate | ( | ) |
Definition at line 361 of file affinexform_test.cpp.
References moab::AffineXform::accumulate(), moab::CartVect::array(), ASSERT_VECTORS_EQUAL, point1, point2, refl(), moab::AffineXform::reflection(), moab::AffineXform::rotation(), moab::AffineXform::scale(), moab::AffineXform::translation(), vect1, vect2, moab::AffineXform::xform_point(), and moab::AffineXform::xform_vector().
Referenced by main().
{ CartVect indiv, accum; // build an group of transforms. make sure translation is somewhere in the middle AffineXform move, scal, rot1, rot2, refl; move = AffineXform::translation( CartVect( 5, -5, 1 ).array() ); scal = AffineXform::scale( CartVect( 1, 0.5, 2 ).array() ); rot1 = AffineXform::rotation( M_PI / 3, CartVect( 0.5, 0.5, 1 ).array() ); rot2 = AffineXform::rotation( M_PI / 4, CartVect( 1.0, 0.0, 0.0 ).array() ); refl = AffineXform::reflection( CartVect( -1, -1, 0 ).array() ); AffineXform accu; accu.accumulate( scal ); accu.accumulate( rot1 ); accu.accumulate( move ); accu.accumulate( refl ); accu.accumulate( rot2 ); accu.xform_point( point1.array(), accum.array() ); scal.xform_point( point1.array(), indiv.array() ); rot1.xform_point( indiv.array() ); move.xform_point( indiv.array() ); refl.xform_point( indiv.array() ); rot2.xform_point( indiv.array() ); ASSERT_VECTORS_EQUAL( accum, indiv ); accu.xform_point( point2.array(), accum.array() ); scal.xform_point( point2.array(), indiv.array() ); rot1.xform_point( indiv.array() ); move.xform_point( indiv.array() ); refl.xform_point( indiv.array() ); rot2.xform_point( indiv.array() ); ASSERT_VECTORS_EQUAL( accum, indiv ); accu.xform_vector( vect1.array(), accum.array() ); scal.xform_vector( vect1.array(), indiv.array() ); rot1.xform_vector( indiv.array() ); move.xform_vector( indiv.array() ); refl.xform_vector( indiv.array() ); rot2.xform_vector( indiv.array() ); ASSERT_VECTORS_EQUAL( accum, indiv ); accu.xform_vector( vect2.array(), accum.array() ); scal.xform_vector( vect2.array(), indiv.array() ); rot1.xform_vector( indiv.array() ); move.xform_vector( indiv.array() ); refl.xform_vector( indiv.array() ); rot2.xform_vector( indiv.array() ); ASSERT_VECTORS_EQUAL( accum, indiv ); }
void test_inversion | ( | ) |
Definition at line 412 of file affinexform_test.cpp.
References moab::AffineXform::accumulate(), moab::CartVect::array(), ASSERT_VECTORS_EQUAL, moab::AffineXform::inverse(), point1, point2, refl(), moab::AffineXform::reflection(), moab::AffineXform::rotation(), moab::AffineXform::scale(), moab::AffineXform::translation(), vect1, vect2, moab::AffineXform::xform_point(), and moab::AffineXform::xform_vector().
Referenced by main().
{ CartVect result; // build an group of transforms. make sure translation is somewhere in the middle AffineXform move, scal, rot1, rot2, refl; move = AffineXform::translation( CartVect( 5, -5, 1 ).array() ); scal = AffineXform::scale( CartVect( 1, 0.5, 2 ).array() ); rot1 = AffineXform::rotation( M_PI / 3, CartVect( 0.5, 0.5, 1 ).array() ); rot2 = AffineXform::rotation( M_PI / 4, CartVect( 1.0, 0.0, 0.0 ).array() ); refl = AffineXform::reflection( CartVect( -1, -1, 0 ).array() ); AffineXform acc; acc.accumulate( scal ); acc.accumulate( rot1 ); acc.accumulate( move ); acc.accumulate( refl ); acc.accumulate( rot2 ); AffineXform inv = acc.inverse(); acc.xform_point( point1.array(), result.array() ); inv.xform_point( result.array() ); ASSERT_VECTORS_EQUAL( point1, result ); acc.xform_point( point2.array(), result.array() ); inv.xform_point( result.array() ); ASSERT_VECTORS_EQUAL( point2, result ); acc.xform_vector( vect1.array(), result.array() ); inv.xform_vector( result.array() ); ASSERT_VECTORS_EQUAL( vect1, result ); acc.xform_vector( vect2.array(), result.array() ); inv.xform_vector( result.array() ); ASSERT_VECTORS_EQUAL( vect2, result ); }
void test_is_reflection | ( | ) |
Definition at line 449 of file affinexform_test.cpp.
References moab::AffineXform::accumulate(), ASSERT, moab::AffineXform::inverse(), moab::AffineXform::reflection(), moab::AffineXform::rotation(), moab::AffineXform::scale(), and moab::AffineXform::translation().
Referenced by main().
{ AffineXform refl1, refl2, scale; refl1 = AffineXform::reflection( CartVect( -1, -1, 0 ).array() ); refl2 = AffineXform::reflection( CartVect( 1, 0, 0 ).array() ); scale = AffineXform::scale( CartVect( -1, 1, 1 ).array() ); ASSERT( refl1.reflection() ); ASSERT( refl2.reflection() ); ASSERT( scale.reflection() ); AffineXform inv1, inv2, inv3; inv1 = refl1.inverse(); inv2 = refl2.inverse(); inv3 = scale.inverse(); ASSERT( inv1.reflection() ); ASSERT( inv2.reflection() ); ASSERT( inv3.reflection() ); refl1.accumulate( refl2 ); refl2.accumulate( scale ); ASSERT( !refl1.reflection() ); ASSERT( !refl2.reflection() ); AffineXform rot, mov; rot = AffineXform::rotation( M_PI / 4, CartVect( 1, 1, 1 ).array() ); mov = AffineXform::translation( CartVect( -5, 6, 7 ).array() ); ASSERT( !rot.reflection() ); ASSERT( !mov.reflection() ); }
void test_none | ( | ) |
Definition at line 124 of file affinexform_test.cpp.
References moab::CartVect::array(), ASSERT_VECTORS_EQUAL, output, point1, point2, vect1, vect2, moab::AffineXform::xform_point(), and moab::AffineXform::xform_vector().
Referenced by main().
{ // default xform should do nothing. CartVect output; AffineXform none; none.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 ); none.xform_point( point2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point2 ); none.xform_vector( vect1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, vect1 ); none.xform_vector( vect2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, vect2 ); }
void test_reflection | ( | ) |
Definition at line 273 of file affinexform_test.cpp.
References moab::CartVect::array(), ASSERT_DOUBLES_EQUAL, ASSERT_VECTORS_EQUAL, moab::Matrix3::determinant(), moab::CartVect::length(), moab::AffineXform::matrix(), output, point1, point2, refl(), moab::AffineXform::reflection(), vect1, vect2, moab::AffineXform::xform_point(), and moab::AffineXform::xform_vector().
Referenced by main().
{ CartVect output; // reflect about XY plane AffineXform ref = AffineXform::reflection( CartVect( 0, 0, 1 ).array() ); ASSERT_DOUBLES_EQUAL( ref.matrix().determinant(), -1.0 ); ref.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 ); ref.xform_point( point2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), point2.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( point2[0], point2[1], -point2[2] ) ); ref.xform_vector( vect1.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect1.length() ); ASSERT_VECTORS_EQUAL( output, -vect1 ); ref.xform_vector( vect2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect2.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( 1, 0, -1 ) ); // reflect about arbitrary palne CartVect norm( 3, 2, 1 ); ref = AffineXform::reflection( norm.array() ); ASSERT_DOUBLES_EQUAL( ref.matrix().determinant(), -1.0 ); ref.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 ); ref.xform_point( point2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), point2.length() ); ASSERT_VECTORS_EQUAL( output, refl( point2, norm ) ); ref.xform_vector( vect1.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect1.length() ); ASSERT_VECTORS_EQUAL( output, refl( vect1, norm ) ); ref.xform_vector( vect2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect2.length() ); ASSERT_VECTORS_EQUAL( output, refl( vect2, norm ) ); }
void test_rotation | ( | ) |
Definition at line 159 of file affinexform_test.cpp.
References moab::CartVect::array(), ASSERT_DOUBLES_EQUAL, ASSERT_VECTORS_EQUAL, moab::Matrix3::determinant(), moab::CartVect::length(), moab::AffineXform::matrix(), output, point1, point2, moab::AffineXform::rotation(), vect1, vect2, moab::AffineXform::xform_point(), and moab::AffineXform::xform_vector().
Referenced by main().
{ CartVect output; // rotate 90 degress about Z axis AffineXform rot = AffineXform::rotation( M_PI / 2.0, CartVect( 0, 0, 1 ).array() ); ASSERT_DOUBLES_EQUAL( rot.matrix().determinant(), 1.0 ); rot.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 ); // origin not affected by transform CartVect expectedz( -point2[1], point2[0], point2[2] ); // in first quadrant rot.xform_point( point2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), point2.length() ); ASSERT_VECTORS_EQUAL( output, expectedz ); rot.xform_vector( vect1.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect1.length() ); ASSERT_VECTORS_EQUAL( output, vect1 ); rot.xform_vector( vect2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect2.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( 0, 1, 1 ) ); // rotate 90 degress about Y axis rot = AffineXform::rotation( M_PI / 2.0, CartVect( 0, 1, 0 ).array() ); ASSERT_DOUBLES_EQUAL( rot.matrix().determinant(), 1.0 ); rot.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 ); // origin not affected by transform CartVect expectedy( point2[2], point2[1], -point2[0] ); // in second quadrant rot.xform_point( point2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), point2.length() ); ASSERT_VECTORS_EQUAL( output, expectedy ); rot.xform_vector( vect1.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect1.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( -100, 0, 0 ) ); rot.xform_vector( vect2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect2.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( 1, 0, -1 ) ); // rotate 90 degress about X axis rot = AffineXform::rotation( M_PI / 2.0, CartVect( 1, 0, 0 ).array() ); ASSERT_DOUBLES_EQUAL( rot.matrix().determinant(), 1.0 ); rot.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 ); // origin not affected by transform CartVect expectedx( point2[0], -point2[2], point2[1] ); // in third quadrant rot.xform_point( point2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), point2.length() ); ASSERT_VECTORS_EQUAL( output, expectedx ); rot.xform_vector( vect1.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect1.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( 0, 100, 0 ) ); rot.xform_vector( vect2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect2.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( 1, -1, 0 ) ); // rotate 180 degrees about vector in XY plane rot = AffineXform::rotation( M_PI, CartVect( 1, 1, 0 ).array() ); ASSERT_DOUBLES_EQUAL( rot.matrix().determinant(), 1.0 ); rot.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 ); // origin not affected by transform rot.xform_point( point2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), point2.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( point2[1], point2[0], -point2[2] ) ); rot.xform_vector( vect1.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect1.length() ); ASSERT_VECTORS_EQUAL( output, -vect1 ); // vector is in xy plane rot.xform_vector( vect2.array(), output.array() ); ASSERT_DOUBLES_EQUAL( output.length(), vect2.length() ); ASSERT_VECTORS_EQUAL( output, CartVect( 0, 1, -1 ) ); }
void test_rotation_from_vec | ( | ) |
Definition at line 247 of file affinexform_test.cpp.
References moab::CartVect::array(), ASSERT_DOUBLES_EQUAL, ASSERT_VECTORS_EQUAL, moab::CartVect::length(), moab::AffineXform::rotation(), and moab::AffineXform::xform_vector().
Referenced by main().
{ CartVect v1( 1, 1, 1 ); CartVect v2( 1, 0, 0 ); AffineXform rot = AffineXform::rotation( v1.array(), v2.array() ); CartVect result; rot.xform_vector( v1.array(), result.array() ); // vectors should be parallel, but not same length ASSERT_DOUBLES_EQUAL( result.length(), v1.length() ); result.normalize(); ASSERT_VECTORS_EQUAL( result, v2 ); double v3[] = { -1, 0, 0 }; rot = AffineXform::rotation( v3, v2.array() ); rot.xform_vector( v3, result.array() ); ASSERT_VECTORS_EQUAL( result, v2 ); }
void test_scale | ( | ) |
Definition at line 309 of file affinexform_test.cpp.
References moab::CartVect::array(), ASSERT, ASSERT_VECTORS_EQUAL, output, point1, point2, moab::AffineXform::scale(), vect1, and vect2.
Referenced by main().
{ CartVect output; AffineXform scale = AffineXform::scale( 1.0 ); ASSERT( !scale.scale() ); scale = AffineXform::scale( -1.0 ); ASSERT( !scale.scale() ); // scale in X only scale = AffineXform::scale( CartVect( 2, 1, 1 ).array() ); ASSERT( scale.scale() ); scale.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, CartVect( 2 * point1[0], point1[1], point1[2] ) ); scale.xform_point( point2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, CartVect( 2 * point2[0], point2[1], point2[2] ) ); scale.xform_vector( vect1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, CartVect( 2 * vect1[0], vect1[1], vect1[2] ) ); scale.xform_vector( vect2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, CartVect( 2 * vect2[0], vect2[1], vect2[2] ) ); // scale in all scale = AffineXform::scale( CartVect( 0.5, 0.5, 0.5 ).array() ); ASSERT( scale.scale() ); scale.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, 0.5 * point1 ); scale.xform_point( point2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, 0.5 * point2 ); scale.xform_vector( vect1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, 0.5 * vect1 ); scale.xform_vector( vect2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, 0.5 * vect2 ); }
void test_scale_point | ( | ) |
Definition at line 343 of file affinexform_test.cpp.
References ASSERT_VECTORS_EQUAL, moab::AffineXform::scale(), and moab::AffineXform::xform_point().
Referenced by main().
{ const double point[] = { 2, 3, 4 }; const double f[] = { 0.2, 0.1, 0.3 }; double result[3]; AffineXform scale = AffineXform::scale( f, point ); scale.xform_point( point, result ); ASSERT_VECTORS_EQUAL( result, point ); const double delta[3] = { 1, 0, 2 }; const double pt2[] = { point[0] + delta[0], point[1] + delta[1], point[2] + delta[2] }; scale = AffineXform::scale( f, point ); scale.xform_point( pt2, result ); const double expected[] = { point[0] + f[0] * delta[0], point[1] + f[1] * delta[1], point[2] + f[2] * delta[2] }; ASSERT_VECTORS_EQUAL( result, expected ); }
void test_translation | ( | ) |
Definition at line 139 of file affinexform_test.cpp.
References moab::CartVect::array(), ASSERT_VECTORS_EQUAL, output, point1, point2, moab::AffineXform::translation(), vect1, vect2, moab::AffineXform::xform_point(), and moab::AffineXform::xform_vector().
Referenced by main().
{ CartVect offset( 1.0, 2.0, 3.0 ); CartVect output; AffineXform move = AffineXform::translation( offset.array() ); // test that points are moved by offset move.xform_point( point1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point1 + offset ); move.xform_point( point2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, point2 + offset ); // vectors should not be changed by a translation move.xform_vector( vect1.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, vect1 ); move.xform_vector( vect2.array(), output.array() ); ASSERT_VECTORS_EQUAL( output, vect2 ); }
int error_count = 0 |
Definition at line 82 of file affinexform_test.cpp.
Referenced by assert_bool(), assert_doubles_equal(), assert_vector_element(), assert_vectors_equal(), check_parallel_read(), TreeValidator::error(), TreeValidator::is_valid(), main(), mb_skin_adjacent_surf_patches(), runner_run_tests(), valid_ghosting_owners(), and TreeValidator::visit().
Referenced by test_accumulate(), test_inversion(), test_none(), test_reflection(), test_rotation(), test_scale(), and test_translation().
const double TOL = 1e-6 |
Definition at line 80 of file affinexform_test.cpp.
Referenced by assert_doubles_equal(), assert_vector_element(), assert_vectors_equal(), test_build_from_tri(), test_contained(), and test_ray_intersect().
Referenced by test_accumulate(), test_inversion(), test_none(), test_reflection(), test_rotation(), test_scale(), and test_translation().
Referenced by test_accumulate(), test_inversion(), test_none(), test_reflection(), test_rotation(), test_scale(), and test_translation().