void ParticleHandler::init(){ #ifdef FIXEDSIZE setNumParticles(FIXEDSIZE); #else setNumParticles(10000); initGrid(); // loadModel(); initIndexes(); #endif forceHandler->initForces(); }
void ParticleHandler::loadModel(string name){ bool addFaceCenter = true; string path="/Users/Tintamar/Work/BO/Chrone/tests/"; if(name=="")path+= "pyramid.obj"; else path+=name; ofFile file(path); ofBuffer buf= file.readToBuffer(); ofBuffer::Lines lines = buf.getLines(); int numVec = 0,numFace=0; for(auto l:lines){ if(l[0] == 'v'){ numVec++; } if (l[0] == 'f'){ numFace++; } } numParticles = numVec+(addFaceCenter?numFace:0); side = pow((double)numParticles,0.334); positionInit.resize(numParticles, MyMatrixType::ColsAtCompileTime); int idx=0; double wi = getWidthSpace()/2.0; for(auto l:lines){ if(l[0] == 'v'){ vector<string> ll = ofSplitString(l, " "); positionInit.row(idx)[0] = ofToFloat(ll[1])*wi; positionInit.row(idx)[1] = ofToFloat(ll[2])*wi; positionInit.row(idx)[2] = ofToFloat(ll[3])*wi; idx++; } if(l[0]=='f' && addFaceCenter){ vector<string> ll = ofSplitString(l, " "); int numCoins = ll.size()-1; Array<MatReal,3,1> middle; middle.setZero(); for(int i = 0 ; i < numCoins ; i++){ middle+=positionInit.row(ofToInt(ll[i+1])); } middle/=numCoins; positionInit.row(idx) = middle; idx++; } } setNumParticles(numParticles); }
ParticleFilter::ParticleFilter( int frameWidth, int frameHeight, int nParticles, int nIters, int particleWidth, int particleHeight, int histSize, Target *target ) { type = Rectangle; m_target = target; img_height = frameHeight; img_width = frameWidth; m_num_particles_to_display = 0; setNumParticles(nParticles); setNumIters(nIters); setParticleWidth(particleWidth); setParticleHeight(particleHeight); setParticlesToDisplay(m_num_particles_to_display); setHistSize(histSize); m_distortRange = 5; srand(time(nullptr)); initializeParticles(); auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count(); m_RandomGen = std::mt19937(seed); }
bool Localizer::loadConfig(istream& is) { while(1) { string line; getline(is,line); if(!is.good()) break; if(line[0]=='#') continue; if(line=="end") return true; stringstream buffer(line); string command; buffer>>command; if(command=="numParticles:") { int num; buffer>>num; setNumParticles(num); } else if(command=="neff:")
bool Emitter::parseParticleFile(std::string _filePath) { Parser p(_filePath); std::string keyword = ""; while((keyword = p.getNextKeyword()) != "") { if(keyword == "ResourceID") loadTexture(p.getInt(0)); else if(keyword == "NumParticles") setNumParticles(p.getInt(0)); else if(keyword == "Pulse") { mPulseRate = p.getFloat(0); mPulseLength = p.getFloat(1); } else if(keyword == "ColourStart") { mColourStart.r = (sf::Uint8)p.getFloat(0); mColourStart.g = (sf::Uint8)p.getFloat(1); mColourStart.b = (sf::Uint8)p.getFloat(2); mColourStart.a = (sf::Uint8)p.getFloat(3); } else if(keyword == "ColourEnd") { mColourEnd.r = (sf::Uint8)p.getFloat(0); mColourEnd.g = (sf::Uint8)p.getFloat(1); mColourEnd.b = (sf::Uint8)p.getFloat(2); mColourEnd.a = (sf::Uint8)p.getFloat(3); } else if(keyword == "ColourStartVariant") { mColourStartVariant.r = (sf::Uint8)p.getFloat(0); mColourStartVariant.g = (sf::Uint8)p.getFloat(1); mColourStartVariant.b = (sf::Uint8)p.getFloat(2); mColourStartVariant.a = (sf::Uint8)p.getFloat(3); } else if(keyword == "ColourEndVariant") { mColourEndVariant.r = (sf::Uint8)p.getFloat(0); mColourEndVariant.g = (sf::Uint8)p.getFloat(1); mColourEndVariant.b = (sf::Uint8)p.getFloat(2); mColourEndVariant.a = (sf::Uint8)p.getFloat(3); } else if(keyword == "SizeStart") mSizeStart = p.getFloat(0); else if(keyword == "SizeEnd") mSizeEnd = p.getFloat(0); else if(keyword == "SizeStartVariant") mSizeStartVariant = p.getFloat(0); else if(keyword == "SizeEndVariant") mSizeEndVariant = p.getFloat(0); else if(keyword == "SpeedStart") mSpeedStart = p.getFloat(0); else if(keyword == "SpeedEnd") mSpeedEnd = p.getFloat(0); else if(keyword == "SpeedStartVariant") mSpeedStartVariant = p.getFloat(0); else if(keyword == "SpeedEndVariant") mSpeedEndVariant = p.getFloat(0); else if(keyword == "LifeTime") mLifeTime = p.getFloat(0); else if(keyword == "LifeTimeVariant") mLifeTimeVariant = p.getFloat(0); else if(keyword == "PositionVariant") { mPositionVariant.x = p.getFloat(0); mPositionVariant.y = p.getFloat(1); } } calculateBirthRate(); return true; }