diff --git a/tests/pe/Collision.cpp b/tests/pe/Collision.cpp index 9abc2fb2e7080262dda47b15ca7b48c8f18dbd6c..98ce1fc4a43f00854911c54a7373f0c86e50cbf8 100644 --- a/tests/pe/Collision.cpp +++ b/tests/pe/Collision.cpp @@ -58,7 +58,9 @@ void SphereTest() Sphere sp1(123, 1, Vec3(0,0,0), Vec3(0,0,0), Quat(), 1, iron, false, true, false); Sphere sp2(124, 2, Vec3(real_t(1.5),0,0), Vec3(0,0,0), Quat(), 1, iron, false, true, false); Sphere sp3(125, 3, Vec3(real_t(3.0),0,0), Vec3(0,0,0), Quat(), 1, iron, false, true, false); + Sphere sp4(124, 2, Vec3(0,real_t(1.5),0), Vec3(0,0,0), Quat(), 1, iron, false, true, false); Plane pl1(223, 1, Vec3(0,0,0), Vec3(1,1,1).getNormalized(), 0, iron); + CylindricalBoundary cb1(333, 0, Vec3(-100,0,0), 2, iron); std::vector<Contact> contacts; fcd::AnalyticCollideFunctor< std::vector<Contact> > collideFunc(contacts); @@ -85,6 +87,26 @@ void SphereTest() Contact( &sp2, &pl1, Vec3(1,real_t(-0.5),real_t(-0.5)), Vec3(1, 1, 1).getNormalized(), real_t(-0.133974596215561181)) ); WALBERLA_CHECK( !collideFunc(&sp3, &pl1) ); + + // SPHERE <-> CYLINDRICAL BOUNDARY + WALBERLA_LOG_INFO("SPHERE <-> CYLINDRICAL BOUNDARY"); + contacts.clear(); + WALBERLA_CHECK( !collideFunc(&sp1, &cb1) ); + WALBERLA_CHECK( !collideFunc(&sp2, &cb1) ); + WALBERLA_CHECK( collideFunc(&sp4, &cb1) ); + checkContact( contacts.at(0), + Contact( &sp4, &cb1, Vec3(0,real_t(2),real_t(0)), Vec3(0, -1, 0).getNormalized(), real_t(-0.5)) ); + cb1.rotateAroundOrigin( Vec3( 0,0,1), math::M_PI * real_t(0.25) ); + WALBERLA_CHECK( !collideFunc(&sp1, &cb1) ); + WALBERLA_CHECK( collideFunc(&sp2, &cb1) ); + WALBERLA_CHECK( collideFunc(&sp4, &cb1) ); + const real_t xPos = real_t(3) / real_t(4) + real_t(2) / real_c(sqrt(real_t(2))); + const real_t yPos = xPos - real_t(4) / real_c(sqrt(real_t(2))); + const real_t dist = real_c(sqrt((xPos - real_t(1.5)) * (xPos - real_t(1.5)) + yPos * yPos)) - sp4.getRadius(); + checkContact( contacts.at(1), + Contact( &sp2, &cb1, Vec3(xPos, yPos, 0), Vec3(-1, +1, 0).getNormalized(), dist) ); + checkContact( contacts.at(2), + Contact( &sp4, &cb1, Vec3(yPos, xPos, 0), Vec3(+1, -1, 0).getNormalized(), dist) ); } void BoxTest()