Skip to content
Snippets Groups Projects
Commit 468303a6 authored by Sebastian Eibl's avatar Sebastian Eibl
Browse files

updated tests

parent 0cab056f
No related merge requests found
...@@ -61,11 +61,12 @@ void SphereTest() ...@@ -61,11 +61,12 @@ void SphereTest()
Plane pl1(223, 1, Vec3(0,0,0), Vec3(1,1,1).getNormalized(), 0, iron); Plane pl1(223, 1, Vec3(0,0,0), Vec3(1,1,1).getNormalized(), 0, iron);
std::vector<Contact> contacts; std::vector<Contact> contacts;
fcd::AnalyticCollideFunctor< std::vector<Contact> > collideFunc(contacts);
// SPHERE <-> SPHERE // SPHERE <-> SPHERE
WALBERLA_LOG_INFO("SPHERE <-> SPHERE"); WALBERLA_LOG_INFO("SPHERE <-> SPHERE");
WALBERLA_CHECK( !collide(&sp1, &sp3, contacts) ); WALBERLA_CHECK( !collideFunc(&sp1, &sp3) );
WALBERLA_CHECK( collide(&sp1, &sp2, contacts) ); WALBERLA_CHECK( collideFunc(&sp1, &sp2) );
checkContact( contacts.at(0), checkContact( contacts.at(0),
Contact( &sp1, &sp2, Vec3(real_t(0.75), 0, 0), Vec3(-1, 0, 0), real_t(-0.5)) ); Contact( &sp1, &sp2, Vec3(real_t(0.75), 0, 0), Vec3(-1, 0, 0), real_t(-0.5)) );
...@@ -73,17 +74,17 @@ void SphereTest() ...@@ -73,17 +74,17 @@ void SphereTest()
// SPHERE <-> PLANE // SPHERE <-> PLANE
WALBERLA_LOG_INFO("SPHERE <-> PLANE"); WALBERLA_LOG_INFO("SPHERE <-> PLANE");
contacts.clear(); contacts.clear();
WALBERLA_CHECK( collide(&sp1, &pl1, contacts) ); WALBERLA_CHECK( collideFunc(&sp1, &pl1) );
WALBERLA_CHECK( collide(&sp2, &pl1, contacts) ); WALBERLA_CHECK( collideFunc(&sp2, &pl1) );
checkContact( contacts.at(1), checkContact( contacts.at(1),
Contact( &sp2, &pl1, Vec3(1,real_t(-0.5),real_t(-0.5)), Vec3(1, 1, 1).getNormalized(), real_t(-0.133974596215561181)) ); Contact( &sp2, &pl1, Vec3(1,real_t(-0.5),real_t(-0.5)), Vec3(1, 1, 1).getNormalized(), real_t(-0.133974596215561181)) );
// ORDER INVARIANCE // ORDER INVARIANCE
contacts.clear(); contacts.clear();
WALBERLA_CHECK( collide(&pl1, &sp2, contacts) ); WALBERLA_CHECK( collideFunc(&pl1, &sp2) );
checkContact( contacts.at(0), checkContact( contacts.at(0),
Contact( &sp2, &pl1, Vec3(1,real_t(-0.5),real_t(-0.5)), Vec3(1, 1, 1).getNormalized(), real_t(-0.133974596215561181)) ); Contact( &sp2, &pl1, Vec3(1,real_t(-0.5),real_t(-0.5)), Vec3(1, 1, 1).getNormalized(), real_t(-0.133974596215561181)) );
WALBERLA_CHECK( !collide(&sp3, &pl1, contacts) ); WALBERLA_CHECK( !collideFunc(&sp3, &pl1) );
} }
void BoxTest() void BoxTest()
...@@ -100,6 +101,7 @@ void BoxTest() ...@@ -100,6 +101,7 @@ void BoxTest()
b5.rotate( Vec3(1,0,0), real_t(math::PI * 0.25) ); b5.rotate( Vec3(1,0,0), real_t(math::PI * 0.25) );
std::vector<Contact> contacts; std::vector<Contact> contacts;
fcd::AnalyticCollideFunctor< std::vector<Contact> > collideFunc(contacts);
real_t penetrationDepth = real_t(0); real_t penetrationDepth = real_t(0);
Vec3 contactPoint = Vec3(); Vec3 contactPoint = Vec3();
...@@ -110,12 +112,12 @@ void BoxTest() ...@@ -110,12 +112,12 @@ void BoxTest()
// BOX <-> BOX // BOX <-> BOX
WALBERLA_LOG_INFO("BOX <-> BOX"); WALBERLA_LOG_INFO("BOX <-> BOX");
WALBERLA_CHECK( !collideGJK(&b1, &b3, contactPoint, contactNormal, penetrationDepth) ); WALBERLA_CHECK( !collideGJK(&b1, &b3, contactPoint, contactNormal, penetrationDepth) );
WALBERLA_CHECK( !collide(&b1, &b3, contacts) ); WALBERLA_CHECK( !collideFunc(&b1, &b3) );
// WALBERLA_LOG_WARNING("contactPoint : " << contactPoint); // WALBERLA_LOG_WARNING("contactPoint : " << contactPoint);
// WALBERLA_LOG_WARNING("contactNormal : " << contactNormal); // WALBERLA_LOG_WARNING("contactNormal : " << contactNormal);
// WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth); // WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth);
WALBERLA_CHECK( collideGJK(&b1, &b2, contactPoint, contactNormal, penetrationDepth) ); WALBERLA_CHECK( collideGJK(&b1, &b2, contactPoint, contactNormal, penetrationDepth) );
WALBERLA_CHECK( collide(&b1, &b2, contacts) ); WALBERLA_CHECK( collideFunc(&b1, &b2) );
// WALBERLA_LOG_WARNING("contactPoint : " << contactPoint); // WALBERLA_LOG_WARNING("contactPoint : " << contactPoint);
// WALBERLA_LOG_WARNING("contactNormal : " << contactNormal); // WALBERLA_LOG_WARNING("contactNormal : " << contactNormal);
// WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth); // WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth);
...@@ -123,29 +125,29 @@ void BoxTest() ...@@ -123,29 +125,29 @@ void BoxTest()
b4.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 0.999); b4.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 0.999);
WALBERLA_CHECK( collideGJK(&b1, &b4, contactPoint, contactNormal, penetrationDepth) ); WALBERLA_CHECK( collideGJK(&b1, &b4, contactPoint, contactNormal, penetrationDepth) );
WALBERLA_CHECK( collide(&b1, &b4, contacts) ); WALBERLA_CHECK( collideFunc(&b1, &b4) );
// WALBERLA_LOG_WARNING("contactPoint : " << contacts.back().getPosition()); // WALBERLA_LOG_WARNING("contactPoint : " << contacts.back().getPosition());
// WALBERLA_LOG_WARNING("contactNormal : " << contacts.back().getNormal()); // WALBERLA_LOG_WARNING("contactNormal : " << contacts.back().getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.back().getDistance()); // WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.back().getDistance());
b4.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 1.001); b4.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 1.001);
WALBERLA_CHECK( !collideGJK(&b1, &b4, contactPoint, contactNormal, penetrationDepth) ); WALBERLA_CHECK( !collideGJK(&b1, &b4, contactPoint, contactNormal, penetrationDepth) );
WALBERLA_CHECK( !collide(&b1, &b4, contacts) ); WALBERLA_CHECK( !collideFunc(&b1, &b4) );
b5.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 0.99); b5.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 0.99);
WALBERLA_CHECK( collideGJK(&b1, &b5, contactPoint, contactNormal, penetrationDepth) ); WALBERLA_CHECK( collideGJK(&b1, &b5, contactPoint, contactNormal, penetrationDepth) );
WALBERLA_CHECK( collide(&b1, &b5, contacts) ); WALBERLA_CHECK( collideFunc(&b1, &b5) );
// WALBERLA_LOG_WARNING("contactPoint : " << contacts.back().getPosition()); // WALBERLA_LOG_WARNING("contactPoint : " << contacts.back().getPosition());
// WALBERLA_LOG_WARNING("contactNormal : " << contacts.back().getNormal()); // WALBERLA_LOG_WARNING("contactNormal : " << contacts.back().getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.back().getDistance()); // WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.back().getDistance());
b5.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 1.01); b5.setPosition( (Vec3(0,0,1) * real_t(sqrt(3)) + Vec3(0,0,1)) * 1.01);
WALBERLA_CHECK( !collideGJK(&b1, &b5, contactPoint, contactNormal, penetrationDepth) ); WALBERLA_CHECK( !collideGJK(&b1, &b5, contactPoint, contactNormal, penetrationDepth) );
WALBERLA_CHECK( !collide(&b1, &b5, contacts) ); WALBERLA_CHECK( !collideFunc(&b1, &b5) );
Sphere s1(126, 0, Vec3(real_t(1.5), real_t(1.5), real_t(1.5)), Vec3(0,0,0), Quat(), 1, iron, false, true, false); Sphere s1(126, 0, Vec3(real_t(1.5), real_t(1.5), real_t(1.5)), Vec3(0,0,0), Quat(), 1, iron, false, true, false);
WALBERLA_CHECK( collideGJK(&b1, &s1, contactPoint, contactNormal, penetrationDepth) ); WALBERLA_CHECK( collideGJK(&b1, &s1, contactPoint, contactNormal, penetrationDepth) );
WALBERLA_CHECK( collide(&b1, &s1, contacts) ); WALBERLA_CHECK( collideFunc(&b1, &s1) );
// WALBERLA_LOG_WARNING("contactPoint : " << contactPoint); // WALBERLA_LOG_WARNING("contactPoint : " << contactPoint);
// WALBERLA_LOG_WARNING("contactNormal : " << contactNormal); // WALBERLA_LOG_WARNING("contactNormal : " << contactNormal);
// WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth); // WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth);
...@@ -158,6 +160,7 @@ void CapsuleTest() ...@@ -158,6 +160,7 @@ void CapsuleTest()
Sphere sp1(123, 123, Vec3(0,0,0), Vec3(0,0,0), Quat(), 1, iron, false, true, false); Sphere sp1(123, 123, Vec3(0,0,0), Vec3(0,0,0), Quat(), 1, iron, false, true, false);
std::vector<Contact> contacts; std::vector<Contact> contacts;
fcd::AnalyticCollideFunctor< std::vector<Contact> > collideFunc(contacts);
// CAPSULE <-> SPHERE // CAPSULE <-> SPHERE
WALBERLA_LOG_INFO("CAPSULE <-> SPHERE"); WALBERLA_LOG_INFO("CAPSULE <-> SPHERE");
...@@ -170,30 +173,30 @@ void CapsuleTest() ...@@ -170,30 +173,30 @@ void CapsuleTest()
WALBERLA_CHECK( !collideGJK(&c1, &sp1, contacts) ); WALBERLA_CHECK( !collideGJK(&c1, &sp1, contacts) );
sp1.setPosition(0, real_t(1.9), 0); sp1.setPosition(0, real_t(1.9), 0);
WALBERLA_CHECK( collide(&c1, &sp1, contacts) ); WALBERLA_CHECK( collideFunc(&c1, &sp1) );
// WALBERLA_LOG_WARNING("contactPoint : " << contacts.at(1).getPosition()); // WALBERLA_LOG_WARNING("contactPoint : " << contacts.at(1).getPosition());
// WALBERLA_LOG_WARNING("contactNormal : " << contacts.at(1).getNormal()); // WALBERLA_LOG_WARNING("contactNormal : " << contacts.at(1).getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(1).getDistance()); // WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(1).getDistance());
sp1.setPosition(0, real_t(2.1), 0); sp1.setPosition(0, real_t(2.1), 0);
WALBERLA_CHECK( !collide(&c1, &sp1, contacts) ); WALBERLA_CHECK( !collideFunc(&c1, &sp1) );
// CAPSULE <-> PLANE // CAPSULE <-> PLANE
WALBERLA_LOG_INFO("CAPSULE <-> PLANE"); WALBERLA_LOG_INFO("CAPSULE <-> PLANE");
Plane pl1(124, 124, Vec3(0,0,real_t(-0.9)), Vec3(0,0,1), 0, iron); Plane pl1(124, 124, Vec3(0,0,real_t(-0.9)), Vec3(0,0,1), 0, iron);
WALBERLA_CHECK( collide(&c1, &pl1, contacts) ); WALBERLA_CHECK( collideFunc(&c1, &pl1) );
// WALBERLA_LOG_WARNING("contactPoint : " << contacts.at(2).getPosition()); // WALBERLA_LOG_WARNING("contactPoint : " << contacts.at(2).getPosition());
// WALBERLA_LOG_WARNING("contactNormal : " << contacts.at(2).getNormal()); // WALBERLA_LOG_WARNING("contactNormal : " << contacts.at(2).getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(2).getDistance()); // WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(2).getDistance());
pl1.setPosition(0,0, real_t(-1.1)); pl1.setPosition(0,0, real_t(-1.1));
WALBERLA_CHECK( !collide(&c1, &pl1, contacts) ); WALBERLA_CHECK( !collideFunc(&c1, &pl1) );
Plane pl2(124, 124, Vec3(real_t(1.9),0,0), Vec3(-1,0,0), 0, iron); Plane pl2(124, 124, Vec3(real_t(1.9),0,0), Vec3(-1,0,0), 0, iron);
WALBERLA_CHECK( collide(&c1, &pl2, contacts) ); WALBERLA_CHECK( collideFunc(&c1, &pl2) );
// WALBERLA_LOG_WARNING("contactPoint : " << contacts.at(3).getPosition()); // WALBERLA_LOG_WARNING("contactPoint : " << contacts.at(3).getPosition());
// WALBERLA_LOG_WARNING("contactNormal : " << contacts.at(3).getNormal()); // WALBERLA_LOG_WARNING("contactNormal : " << contacts.at(3).getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(3).getDistance()); // WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(3).getDistance());
pl2.setPosition(real_t(2.1),0, 0); pl2.setPosition(real_t(2.1),0, 0);
WALBERLA_CHECK( !collide(&c1, &pl2, contacts) ); WALBERLA_CHECK( !collideFunc(&c1, &pl2) );
} }
...@@ -262,7 +265,7 @@ void UnionTest() ...@@ -262,7 +265,7 @@ void UnionTest()
// SPHERE <-> SPHERE // SPHERE <-> SPHERE
WALBERLA_LOG_INFO("UNION <-> UNION"); WALBERLA_LOG_INFO("UNION <-> UNION");
AnalyticCollideFunctor< std::vector<Contact> > func(contacts); AnalyticCollideFunctor< std::vector<Contact> > func(contacts);
DoubleCast<boost::tuple<UnionT, Sphere>, boost::tuple<UnionT, Sphere>, AnalyticCollideFunctor< std::vector<Contact> >, bool>::execute(&un1, &un2, func); func(&un1, &un2);
checkContact( contacts.at(0), checkContact( contacts.at(0),
Contact( sp1, sp2, Vec3(real_t(0.75), 0, 0), Vec3(-1, 0, 0), real_t(-0.5)) ); Contact( sp1, sp2, Vec3(real_t(0.75), 0, 0), Vec3(-1, 0, 0), real_t(-0.5)) );
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment