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

updated tests

parent 0cab056f
Branches
Tags
No related merge requests found
......@@ -61,11 +61,12 @@ void SphereTest()
Plane pl1(223, 1, Vec3(0,0,0), Vec3(1,1,1).getNormalized(), 0, iron);
std::vector<Contact> contacts;
fcd::AnalyticCollideFunctor< std::vector<Contact> > collideFunc(contacts);
// SPHERE <-> SPHERE
WALBERLA_LOG_INFO("SPHERE <-> SPHERE");
WALBERLA_CHECK( !collide(&sp1, &sp3, contacts) );
WALBERLA_CHECK( collide(&sp1, &sp2, contacts) );
WALBERLA_CHECK( !collideFunc(&sp1, &sp3) );
WALBERLA_CHECK( collideFunc(&sp1, &sp2) );
checkContact( contacts.at(0),
Contact( &sp1, &sp2, Vec3(real_t(0.75), 0, 0), Vec3(-1, 0, 0), real_t(-0.5)) );
......@@ -73,17 +74,17 @@ void SphereTest()
// SPHERE <-> PLANE
WALBERLA_LOG_INFO("SPHERE <-> PLANE");
contacts.clear();
WALBERLA_CHECK( collide(&sp1, &pl1, contacts) );
WALBERLA_CHECK( collide(&sp2, &pl1, contacts) );
WALBERLA_CHECK( collideFunc(&sp1, &pl1) );
WALBERLA_CHECK( collideFunc(&sp2, &pl1) );
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)) );
// ORDER INVARIANCE
contacts.clear();
WALBERLA_CHECK( collide(&pl1, &sp2, contacts) );
WALBERLA_CHECK( collideFunc(&pl1, &sp2) );
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)) );
WALBERLA_CHECK( !collide(&sp3, &pl1, contacts) );
WALBERLA_CHECK( !collideFunc(&sp3, &pl1) );
}
void BoxTest()
......@@ -100,6 +101,7 @@ void BoxTest()
b5.rotate( Vec3(1,0,0), real_t(math::PI * 0.25) );
std::vector<Contact> contacts;
fcd::AnalyticCollideFunctor< std::vector<Contact> > collideFunc(contacts);
real_t penetrationDepth = real_t(0);
Vec3 contactPoint = Vec3();
......@@ -110,12 +112,12 @@ void BoxTest()
// BOX <-> BOX
WALBERLA_LOG_INFO("BOX <-> BOX");
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("contactNormal : " << contactNormal);
// WALBERLA_LOG_WARNING("penetrationDepth: " << 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("contactNormal : " << contactNormal);
// WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth);
......@@ -123,29 +125,29 @@ void BoxTest()
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( collide(&b1, &b4, contacts) );
WALBERLA_CHECK( collideFunc(&b1, &b4) );
// WALBERLA_LOG_WARNING("contactPoint : " << contacts.back().getPosition());
// WALBERLA_LOG_WARNING("contactNormal : " << contacts.back().getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.back().getDistance());
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( !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);
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("contactNormal : " << contacts.back().getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.back().getDistance());
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( !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);
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("contactNormal : " << contactNormal);
// WALBERLA_LOG_WARNING("penetrationDepth: " << penetrationDepth);
......@@ -158,6 +160,7 @@ void CapsuleTest()
Sphere sp1(123, 123, Vec3(0,0,0), Vec3(0,0,0), Quat(), 1, iron, false, true, false);
std::vector<Contact> contacts;
fcd::AnalyticCollideFunctor< std::vector<Contact> > collideFunc(contacts);
// CAPSULE <-> SPHERE
WALBERLA_LOG_INFO("CAPSULE <-> SPHERE");
......@@ -170,30 +173,30 @@ void CapsuleTest()
WALBERLA_CHECK( !collideGJK(&c1, &sp1, contacts) );
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("contactNormal : " << contacts.at(1).getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(1).getDistance());
sp1.setPosition(0, real_t(2.1), 0);
WALBERLA_CHECK( !collide(&c1, &sp1, contacts) );
WALBERLA_CHECK( !collideFunc(&c1, &sp1) );
// CAPSULE <-> PLANE
WALBERLA_LOG_INFO("CAPSULE <-> PLANE");
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("contactNormal : " << contacts.at(2).getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(2).getDistance());
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);
WALBERLA_CHECK( collide(&c1, &pl2, contacts) );
WALBERLA_CHECK( collideFunc(&c1, &pl2) );
// WALBERLA_LOG_WARNING("contactPoint : " << contacts.at(3).getPosition());
// WALBERLA_LOG_WARNING("contactNormal : " << contacts.at(3).getNormal());
// WALBERLA_LOG_WARNING("penetrationDepth: " << contacts.at(3).getDistance());
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()
// SPHERE <-> SPHERE
WALBERLA_LOG_INFO("UNION <-> UNION");
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),
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