コード例 #1
0
ファイル: SphereLDS.cpp プロジェクト: radarsat1/siconos
SphereLDS::SphereLDS(double r, double m,
                     SP::SiconosVector qinit,
                     SP::SiconosVector vinit)
  : LagrangianDS(qinit, vinit), radius(r), massValue(m)
{

  normalize(q(), 3);
  normalize(q(), 4);
  normalize(q(), 5);
  _ndof = 6;

  assert(qinit->size() == _ndof);
  assert(vinit->size() == _ndof);

  _mass.reset(new SimpleMatrix(_ndof, _ndof));
  _mass->zero();
  I = massValue * radius * radius * 2. / 5.;
  (*_mass)(0, 0) = (*_mass)(1, 1) = (*_mass)(2, 2) = massValue;    ;
  (*_mass)(3, 3) = (*_mass)(4, 4) = (*_mass)(5, 5) = I;

  computeMass();

  _jacobianFGyrq.reset(new SimpleMatrix(_ndof, _ndof));
  _jacobianFGyrqDot.reset(new SimpleMatrix(_ndof, _ndof));

  _fGyr.reset(new SiconosVector(_ndof));
  _fGyr->zero();

  computeFGyr();


}
コード例 #2
0
void SphSystemData2::setTargetSpacing(double spacing) {
    ParticleSystemData2::setRadius(spacing);

    _targetSpacing = spacing;
    _kernelRadius = _kernelRadiusOverTargetSpacing * _targetSpacing;

    computeMass();
}
コード例 #3
0
void btSphere::setRadius(btScalar radius)
{
    if(shape != NULL)
    {
        delete shape;
        shape = new btSphereShape(radius);
        rigidBody->setCollisionShape(shape);

        btScalar mass = computeMass();
        btVector3 intertia;
        this->shape->calculateLocalInertia(mass,intertia);
        this->rigidBody->setMassProps(mass,intertia);
    }
}
コード例 #4
0
void btSphere::init(btScalar radius, btScalar density, const btTransform &transform)
{
    this->density = density;
//    this->size = size;
//    this->initialPosition = position;
//    this->initiaEulerlRotation = EulerRotation;

    // shape
    this->shape = new btSphereShape(radius);

    // rotation with euler method :) (warning order Z-Y-X)
    this->motionState = new btDefaultMotionState(transform);

    // body
    btScalar mass = computeMass();
    btVector3 fallInertia(0,0,0);
    this->shape->calculateLocalInertia(mass,fallInertia);
    this->rigidBody = new btRigidBody(mass,this->motionState,this->shape,fallInertia);

    origin = new RigidBodyOrigin(RigidBodyOrigin::BASIC_SHAPE,(QObject *)this);
    rigidBody->setUserPointer(origin);
}
コード例 #5
0
void SphSystemData2::setTargetDensity(double targetDensity) {
    _targetDensity = targetDensity;

    computeMass();
}
コード例 #6
0
void SphSystemData2::setRelativeKernelRadius(double relativeRadius) {
    _kernelRadiusOverTargetSpacing = relativeRadius;
    _kernelRadius = _kernelRadiusOverTargetSpacing * _targetSpacing;

    computeMass();
}