void UCK::makeUCK(const Molecule& m) { vector<String> v, pairs, lambda_map; PairVector e; // edge set SizeVector sp; getGraph(v, e, m); for(Size i=0; i!=v.size(); ++i) { lambda_map.push_back(lambda("", e, v, i, depth_)); } makePathMatrix(e, sp, v.size()); makePairs(lambda_map, pairs, sp); createFinalString(pairs); return; }
void RibModelMixedContact::setup(tgWorld& world) { double v_size = 3.0; // Create the spinal processes tgStructure vertebrae; addNodes(vertebrae, v_size); addPairs(vertebrae); // Move the first one so we can create a longer snake. // Or you could move the snake at the end, up to you. vertebrae.move(btVector3(0.0, 2 * v_size, v_size * m_segments)); // Create ribs and add them to the vertebrae double majorAxis = 6.0; double minorAxis = 4.0; double startTheta = M_PI / 2.0; double endTheta = 5.0 * M_PI / 4.0; size_t segs = 15; tgStructure ribs; ellipseNodes(ribs, majorAxis, minorAxis, startTheta, endTheta, segs); makePairs(ribs); #if (0) // Attempt at compliant rib attachments ribs.move(btVector3(v_size / 3.0, 2 * v_size - minorAxis, v_size * m_segments)); #else ribs.move(btVector3(0.0, 2 * v_size - minorAxis -.3, v_size * m_segments)); #endif // Create our snake segments tgStructure snake; addSegments(snake, vertebrae, ribs, v_size, m_segments); snake.move(btVector3(0.0, majorAxis, 0.0)); addMuscles(snake); // Create the build spec that uses tags to turn the structure into a real model // Note: This needs to be high enough or things fly apart... const double density = 4.2 / 300.0; const double radius = 0.5; const double friction = 0.5; // Default is 0.5 const double rollFriction = 0.5; // Default is 0.0 const double restitution = 0.0; // Default const tgRod::Config rodConfig(radius, density, friction, rollFriction, restitution); tgBuildSpec spec; spec.addBuilder("rod", new tgRodInfo(rodConfig)); const double elasticity = 500.0; const double elasticityAct = 1000.0; const double damping = 5.0; const double dampingAct = 10.0; const double pretension = 0.0; const bool history = true; const double maxTens = 1000.0; const double maxTensAct = 7000.0; const double maxSpeed = 100.0; const double maxSpeedAct = 24.0; const double mRad = 1.0; const double motorFriction = 10.0; const double motorInertia = 1.0; const bool backDrivable = false; #if (0) //Replacing with tgKinematicActuator, leaving option to turn it off. 9/9/15. tgKinematicActuator::Config muscleConfig(elasticity, damping, pretension, mRad, motorFriction, motorInertia, backDrivable, history, maxTens, maxSpeed); spec.addBuilder("muscle", new tgKinematicContactCableInfo(muscleConfig)); tgKinematicActuator::Config muscleConfigAct(elasticityAct, dampingAct, pretension, mRad, motorFriction, motorInertia, backDrivable, history, maxTensAct, maxSpeedAct); spec.addBuilder("muscleAct", new tgKinematicContactCableInfo(muscleConfigAct)); #else tgSpringCableActuator::Config muscleConfig(elasticity, damping, pretension, history); spec.addBuilder("muscle", new tgBasicContactCableInfo(muscleConfig)); /// @todo acceleration constraint was removed on 12/10/14 Replace with tgKinematicActuator as appropreate tgSpringCableActuator::Config muscleConfigAct(elasticityAct, dampingAct, pretension, history, 7000, 24); spec.addBuilder("muscleAct", new tgBasicContactCableInfo(muscleConfigAct)); #endif #if (0) // Compliant Rib Attachments const double stiffness = 1000; const double damping = .01 * stiffness; tgSpringCableActuator::Config muscleConfig1(stiffness, damping, -M_PI / 2.0); tgSpringCableActuator::Config muscleConfig2(stiffness, damping, M_PI / 2.0); tgSpringCableActuator::Config muscleConfig3(stiffness, damping, M_PI); tgSpringCableActuator::Config muscleConfig4(stiffness, damping, 0); spec.addBuilder("multiMuscle", new tgBasicActuatorInfo(muscleConfig1)); spec.addBuilder("multiMuscle", new tgBasicActuatorInfo(muscleConfig2)); spec.addBuilder("multiMuscle", new tgBasicActuatorInfo(muscleConfig3)); spec.addBuilder("multiMuscle", new tgBasicActuatorInfo(muscleConfig4)); #endif // Create your structureInfo tgStructureInfo structureInfo(snake, spec); // Use the structureInfo to build ourselves structureInfo.buildInto(*this, world); // We could now use tgCast::filter or similar to pull out the models (e.g. muscles) // that we want to control. m_allMuscles = find<tgSpringCableActuator> ("muscleAct"); m_allSegments = find<tgModel> ("segment"); #if (0) trace(structureInfo, *this); #endif // Actually setup the children BaseSpineModelLearning::setup(world); }
HandPairCollection::HandPairCollection( const cv::PCA &pca, const ContourSet &singles ) { makePairs( pca, singles ); }