Ejemplo n.º 1
0
/*
Store stationary particles.
*/
mxArray*
Snapshot::StoreSnapshot0(Snapshot& snapshot)
{
	ParticleFactory& factory = ParticleFactory::getInstance();
	vector<MovingParticle*> vp = snapshot.polygon->getParticles();
	const int dims[] = { vp.size(), 3 };
	vector<float> F(dims[0] * dims[1]);
	for (int j = 0; j < dims[0]; ++j)
	{
		SetData2(F, j, 0, dims[0], dims[1], vp[j]->getInitParticle()->getX());
		SetData2(F, j, 1, dims[0], dims[1], vp[j]->getInitParticle()->getY());
		SetData2(F, j, 2, dims[0], dims[1], (float)vp[j]->getInitParticle()->getId());
	}
	return StoreData(F, mxSINGLE_CLASS, 2, dims);
}
mxArray*
ParticleSimulator::SaveConvexity()
{
	ParticleFactory* factory = ParticleFactory::getInstance();
	const int dims[] = { factory->particles.size(), 3 };
	vector<float> F(dims[0] * dims[1]);
	for (int i = 0; i < dims[0]; ++i)
	{
		MovingParticle* p = factory->particles[i];
		CParticleF pr = p->project(p->created + 0.1);
		SetData2(F, i, 0, dims[0], dims[1], pr.m_X);
		SetData2(F, i, 1, dims[0], dims[1], pr.m_Y);
		SetData2(F, i, 2, dims[0], dims[1], p->reflexive<=0 ? 0.0f: 1.0f);
	}
	return StoreData(F, mxSINGLE_CLASS, 2, dims);
}
mxArray*
ParticleSimulator::SaveDoneEvents()
{
	const int dims[] = { doneEvents.size(), 5 };
	vector<float> F(dims[0] * dims[1]);
	for (int i = 0; i < doneEvents.size(); ++i)
	{
		EventStruct ev = doneEvents[i];
		SetData2(F, i, 0, dims[0], dims[1], (float)ev.p->id);
		SetData2(F, i, 1, dims[0], dims[1], (float)ev.q->id);
		SetData2(F, i, 2, dims[0], dims[1], (float)ev.r->id);
		SetData2(F, i, 0, dims[0], dims[1], (float)ev.t);
		SetData2(F, i, 0, dims[0], dims[1], (float)ev.type);
	}
	return StoreData(F, mxSINGLE_CLASS, 2, dims);
}
Ejemplo n.º 4
0
mxArray*
Snapshot::StoreSnapshot(Snapshot& snapshot)
{
	ParticleFactory& factory = ParticleFactory::getInstance();
	vector<CParticleF> shape = snapshot.polygon->project(snapshot.getProjectionTime());
	const int dims[] = { shape.size(), 4 };
	vector<float> F(dims[0] * dims[1]);
	for (int j = 0; j < dims[0]; ++j)
	{
		SetData2(F, j, 0, dims[0], dims[1], shape[j].m_X);
		SetData2(F, j, 1, dims[0], dims[1], shape[j].m_Y);
		SetData2(F, j, 2, dims[0], dims[1], snapshot.projection_time);
		SetData2(F, j, 3, dims[0], dims[1], snapshot.created_time);
	}
	return StoreData(F, mxSINGLE_CLASS, 2, dims);
}
Ejemplo n.º 5
0
void
PaintInsideHull(vector<unsigned char>& im, 
				const vector<CParticleF>& vch, 
				const int* dims)
{
	for(int y=0; y<dims[1]; ++y)
	{
		for(int x=0; x<dims[0]; ++x)
		{
			bool bOut = false;
			CParticleF q(x, y, 0);
			for(int n=0; n<vch.size(); ++n)
			{
				CParticleF p0 = vch[n];
				CParticleF p1 = vch[(n+1) % vch.size()];
				if(isLeft(p0, p1, q)<0)
				{
					bOut = true;
					break;
				}
			}
			if(bOut == false)
			{
				SetData2(im, x, y, dims[0], dims[1], (unsigned char)1);
			}
		}
	}
}
mxArray*
ParticleSimulator::SaveParticles()
{
	ParticleFactory* factory = ParticleFactory::getInstance();
	const int dims[] = { factory->particles.size(), ParticleDumpSize };
	vector<float> F(dims[0] * dims[1]);
	for (int i = 0; i < dims[0]; ++i)
	{
		MovingParticle* p = factory->particles[i];
		vector<float> v = p->dump2vector();
		for (int j = 0; j < dims[1]; ++j)
		{
			SetData2(F, i, j, dims[0], dims[1], v[j]);
		}
	}
	return StoreData(F, mxSINGLE_CLASS, 2, dims);
}