本文整理汇总了C++中WorldPtr::step方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldPtr::step方法的具体用法?C++ WorldPtr::step怎么用?C++ WorldPtr::step使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldPtr
的用法示例。
在下文中一共展示了WorldPtr::step方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
//==============================================================================
TEST(VskParser, SingleStepSimulations)
{
WorldPtr world = World::create();
EXPECT_NE(world, nullptr);
SkeletonPtr nick = VskParser::readSkeleton("dart://sample/vsk/Nick01.vsk");
EXPECT_NE(nick, nullptr);
EXPECT_EQ(nick->getNumMarkers(), 53u);
SkeletonPtr sehoon
= VskParser::readSkeleton("dart://sample/vsk/SehoonVSK3.vsk");
EXPECT_NE(sehoon, nullptr);
EXPECT_EQ(nick->getNumMarkers(), 53u);
SkeletonPtr yuting = VskParser::readSkeleton("dart://sample/vsk/Yuting.vsk");
EXPECT_NE(yuting, nullptr);
EXPECT_EQ(nick->getNumMarkers(), 53u);
world->removeAllSkeletons();
world->addSkeleton(nick);
EXPECT_EQ(world->getNumSkeletons(), 1u);
world->step();
world->removeAllSkeletons();
world->addSkeleton(sehoon);
EXPECT_EQ(world->getNumSkeletons(), 1u);
world->step();
world->removeAllSkeletons();
world->addSkeleton(yuting);
EXPECT_EQ(world->getNumSkeletons(), 1u);
world->step();
}
示例2:
//==============================================================================
TEST(SkelParser, EmptyWorld)
{
WorldPtr world = SkelParser::readWorld(DART_DATA_PATH"skel/test/empty.skel");
EXPECT_TRUE(world != nullptr);
EXPECT_EQ(world->getTimeStep(), 0.001);
EXPECT_EQ(world->getGravity()(0), 0);
EXPECT_EQ(world->getGravity()(1), 0);
EXPECT_EQ(world->getGravity()(2), -9.81);
EXPECT_EQ((int)world->getNumSkeletons(), 0);
EXPECT_EQ(world->getTime(), 0);
world->step();
EXPECT_EQ(world->getTime(), world->getTimeStep());
}
示例3:
//==============================================================================
TEST(FileInfoWorld, Basic)
{
const size_t numFrames = 100;
const std::string fileName = "testWorld.txt";
double tol = 1e-6;
bool result = false;
FileInfoWorld worldFile;
WorldPtr world = SkelParser::readWorld(
DART_DATA_PATH"/skel/test/file_info_world_test.skel");
EXPECT_TRUE(world != nullptr);
Recording* recording1 = nullptr;
Recording* recording2 = nullptr;
// Do some simulation with recording
for (size_t i = 0; i < numFrames; ++i)
{
world->step();
world->bake();
}
recording1 = world->getRecording();
EXPECT_TRUE(recording1 != nullptr);
// Save the recording to a file
result = worldFile.saveFile(fileName.c_str(), world->getRecording());
EXPECT_TRUE(result);
// Load the file
result = worldFile.loadFile(fileName.c_str());
EXPECT_TRUE(result);
recording2 = worldFile.getRecording();
EXPECT_TRUE(recording2 != nullptr);
// Check number of frames
EXPECT_EQ(recording1->getNumFrames(), (int)numFrames);
EXPECT_EQ(recording2->getNumFrames(), (int)numFrames);
// Check number of skeletons
size_t numSkeletons = recording1->getNumSkeletons();
EXPECT_EQ(recording1->getNumSkeletons(), recording2->getNumSkeletons());
// Check number of dofs of the skeletons
for (size_t i = 0; i < numSkeletons; ++i)
EXPECT_EQ(recording1->getNumDofs(i), recording2->getNumDofs(i));
// Check generalized positions and contact info
for (size_t i = 0; i < numFrames; ++i)
{
// Check generalized positions
for (size_t j = 0; j < numSkeletons; ++j)
{
size_t dofs = recording1->getNumDofs(j);
for (size_t k = 0; k < dofs; ++k)
{
EXPECT_NEAR(recording1->getGenCoord(i, j, k),
recording2->getGenCoord(i, j, k), tol);
}
}
// Check contact info
tol = 1e-3;
size_t numContacts = recording1->getNumContacts(i);
EXPECT_EQ(recording1->getNumContacts(i), recording2->getNumContacts(i));
for (size_t j = 0; j < numContacts; ++j)
{
for (size_t k = 0; k < 3; ++k)
{
EXPECT_NEAR(recording1->getContactForce(i, j)[k],
recording2->getContactForce(i, j)[k], tol);
EXPECT_NEAR(recording1->getContactPoint(i, j)[k],
recording2->getContactPoint(i, j)[k], tol);
}
}
}
}
示例4: SingleContactTest
//==============================================================================
void ConstraintTest::SingleContactTest(const std::string& /*_fileName*/)
{
using namespace std;
using namespace Eigen;
using namespace dart::math;
using namespace dart::collision;
using namespace dart::constraint;
using namespace dart::dynamics;
using namespace dart::simulation;
using namespace dart::io;
//----------------------------------------------------------------------------
// Settings
//----------------------------------------------------------------------------
// Number of random state tests for each skeletons
#ifndef NDEBUG // Debug mode
// std::size_t testCount = 1;
#else
// std::size_t testCount = 1;
#endif
WorldPtr world = World::create();
EXPECT_TRUE(world != nullptr);
world->setGravity(Vector3d(0.0, -10.00, 0.0));
world->setTimeStep(0.001);
world->getConstraintSolver()->setCollisionDetector(
DARTCollisionDetector::create());
SkeletonPtr sphereSkel = createSphere(0.05, Vector3d(0.0, 1.0, 0.0));
BodyNode* sphere = sphereSkel->getBodyNode(0);
Joint* sphereJoint = sphere->getParentJoint();
sphereJoint->setVelocity(3, Random::uniform(-2.0, 2.0)); // x-axis
sphereJoint->setVelocity(5, Random::uniform(-2.0, 2.0)); // z-axis
world->addSkeleton(sphereSkel);
EXPECT_EQ(sphereSkel->getGravity(), world->getGravity());
assert(sphere);
SkeletonPtr boxSkel = createBox(Vector3d(1.0, 1.0, 1.0),
Vector3d(0.0, 1.0, 0.0));
BodyNode* box = boxSkel->getBodyNode(0);
Joint* boxJoint = box->getParentJoint();
boxJoint->setVelocity(3, Random::uniform(-2.0, 2.0)); // x-axis
boxJoint->setVelocity(5, Random::uniform(-2.0, 2.0)); // z-axis
// world->addSkeleton(boxSkel);
// EXPECT_EQ(boxSkel->getGravity(), world->getGravity());
// assert(box);
SkeletonPtr groundSkel = createGround(Vector3d(10000.0, 0.1, 10000.0),
Vector3d(0.0, -0.05, 0.0));
groundSkel->setMobile(false);
// BodyNode* ground = groundSkel->getBodyNode(0);
world->addSkeleton(groundSkel);
EXPECT_EQ(groundSkel->getGravity(), world->getGravity());
// assert(ground);
EXPECT_EQ((int)world->getNumSkeletons(), 2);
// Lower and upper bound of configuration for system
// double lb = -1.5 * constantsd::pi();
// double ub = 1.5 * constantsd::pi();
int maxSteps = 500;
for (int i = 0; i < maxSteps; ++i)
{
// Vector3d pos1 = sphere->getWorldTransform().translation();
// Vector3d vel1 = sphere->getWorldLinearVelocity(pos1);
// std::cout << "pos1:" << pos1.transpose() << std::endl;
// std::cout << "vel1:" << vel1.transpose() << std::endl;
if (!world->checkCollision())
{
world->step();
continue;
}
// for (std::size_t j = 0; j < cd->getNumContacts(); ++j)
// {
// Contact contact = cd->getContact(j);
// Vector3d pos1 = sphere->getTransform().inverse() * contact.point;
// Vector3d vel1 = sphere->getWorldLinearVelocity(pos1);
// std::cout << "pos1:" << pos1.transpose() << std::endl;
// std::cout << "vel1:" << vel1.transpose() << std::endl;
// }
world->step();
const auto& result = world->getConstraintSolver()->getLastCollisionResult();
for (const auto& contact : result.getContacts())
{
Vector3d pos1 = sphere->getTransform().inverse() * contact.point;
Vector3d vel1 = sphere->getLinearVelocity(pos1);
// std::cout << "pos1:" << pos1.transpose() << std::endl;
// std::cout << "pos1[1]: " << pos1[1] << std::endl;
//.........这里部分代码省略.........