Ejemplo n.º 1
0
void TwoDScene::insertEdge( const std::pair<int,int>& edge, scalar radius )
{
  assert( edge.first >= 0 );  assert( edge.first < getNumParticles() );
  assert( edge.second >= 0 ); assert( edge.second < getNumParticles() );
  assert( radius > 0.0 );

  m_edges.push_back(edge);
  m_edge_radii.push_back(radius);
}
Ejemplo n.º 2
0
void GvParticle::update(float dt) 
{

	updateParticles(dt);
 	createParticles(dt*rate);
	if (getNumParticles() > maxCount) 
	{
		deleteParticles(getNumParticles() - maxCount);
	}

}
Ejemplo n.º 3
0
const scalar& TwoDScene::getRadius( int particle ) const
{
  assert( particle >= 0 );
  assert( particle < getNumParticles() );
  
  return m_radii[particle];  
}
Ejemplo n.º 4
0
void TwoDScene::setRadius( int particle, scalar radius )
{
  assert( particle >= 0 );
  assert( particle < getNumParticles() );

  m_radii[particle] = radius;
}
Ejemplo n.º 5
0
void TwoDScene::setFixed( int particle, bool fixed )
{
  assert( particle >= 0 );
  assert( particle < getNumParticles() );

  m_fixed[particle] = fixed;
}
Ejemplo n.º 6
0
bool TwoDScene::isFixed( int particle ) const
{
  assert( particle >= 0 );
  assert( particle < getNumParticles() );

  return m_fixed[particle];
}
Ejemplo n.º 7
0
void TwoDScene::setVelocity( int particle, const Vector2s& vel )
{
  assert( particle >= 0 );
  assert( particle < getNumParticles() );
  
  m_v.segment<2>(2*particle) = vel;
}
Ejemplo n.º 8
0
void TwoDScene::setPosition( int particle, const Vector2s& pos )
{
  assert( particle >= 0 );
  assert( particle < getNumParticles() );

  m_x.segment<2>(2*particle) = pos;
}
void
ParticleSystem::getSpatialDimensions( Vector3d &outCenter, double &outRadius )
{
    idx_t numParticles = getNumParticles();

    //------------ Find Center Of Mass -------------
    Vector3d center;
    center.print();
    for( idx_t i = 0; i < numParticles; i++ )
    {
        center += mParticlePos[i];
    }
    center = center / numParticles;
    center.print();

    outCenter = center;

    //------------ Find Radius -------------
    double dist = 0;

    for( idx_t i = 0; i < numParticles; i++ )
    {
        double tmp = ABS( center.dist(mParticlePos[i]) );

        if( tmp > dist )
            dist = tmp;
    }

    outRadius = dist;

}
Ejemplo n.º 10
0
void TwoDScene::setMass( int particle, const scalar& mass )
{
  assert( particle >= 0 );
  assert( particle < getNumParticles() );

  m_m(2*particle)   = mass;
  m_m(2*particle+1) = mass;
}
void
ParticleSystem::move( Vector3d direction )
{
    idx_t numParticles = getNumParticles();
    for( idx_t i = 0; i < numParticles; i++ )
    {
        mParticlePos[i] += direction;
    }
}
Ejemplo n.º 12
0
void TwoDScene::checkConsistency()
{
  assert( m_x.size() == m_v.size() );
  assert( m_x.size() == m_m.size() );
  assert( m_x.size() == (int) (2*m_fixed.size()) );
  
  assert( (m_x.array()==m_x.array()).all() );
  assert( (m_v.array()==m_v.array()).all() );
  assert( (m_m.array()==m_m.array()).all() );
  
  for( std::vector<std::pair<int,int> >::size_type i = 0; i < m_edges.size(); ++i )
  {
    assert( m_edges[i].first >= 0 );
    assert( m_edges[i].first < getNumParticles() );
    assert( m_edges[i].second >= 0 );
    assert( m_edges[i].second < getNumParticles() );
  }

  // TODO: Add more checks
}
Ejemplo n.º 13
0
scalar TwoDScene::computeKineticEnergy() const
{
  scalar T = 0.0;
  for( int i = 0; i < getNumParticles(); ++i ) T += m_m(2*i)*m_v.segment<2>(2*i).dot(m_v.segment<2>(2*i));
  return 0.5*T;
}