Exemplo n.º 1
0
	GoLWorld random_setup(size_t max_x,
						size_t max_y,
						size_t GoLWorld_x,
						size_t GoLWorld_y,
						size_t number,
						bool wrap)

	{
		if(GoLWorld_x< max_x)
			throw std::invalid_argument("GoLWorld width too small");
		if(GoLWorld_y< max_y)
			throw std::invalid_argument("GoLWorld height too small");
		GoLWorld GoLWorld(GoLWorld_x, GoLWorld_y, wrap);
		std::random_device rd;
		std::mt19937 gen(rd());
		std::uniform_int_distribution<> dis_x(1, max_x-1);
		std::uniform_int_distribution<> dis_y(1, max_y-1);
 
		//TODO - surely there's a quicker way?
		//Like std::shuffle on a vector and send it in
		for (size_t n=0; n<number; ++n)
		{
			try
			{
				GoLWorld.Spark(dis_x(gen), dis_y(gen));
			}
			catch(...)//TODO Please!
			{
			}
		}
		return GoLWorld;
	}
Exemplo n.º 2
0
void HemisphereSampling::getRandom(
		//in
		int kernelSize, bool allPointsOnEmishphereSurface, bool distanceFalloff,
		//out
		std::vector<glm::vec3>& kernel
		) {
			std::random_device rd;
			std::mt19937 gen(rd());
			std::uniform_real_distribution<> dis_y(0, 1);
			std::uniform_real_distribution<> dis_xz(-1, 1);
 
			for (int i = 0; i < kernelSize; ++i) {
				//kernel[i] = glm::vec3( dis_xy(gen), dis_xy(gen), dis_z(gen) );
				kernel.push_back( glm::vec3( dis_xz(gen), dis_y(gen), dis_xz(gen) ));
				kernel[i] = glm::normalize(kernel[i]);

				if (!allPointsOnEmishphereSurface) {
					if (distanceFalloff) {
						float scale = static_cast<float>(i) / static_cast<float>(kernelSize);
						//  return v0+(v1-v0)*t;
						scale = 0.1f + (1.0f - 0.1) * (scale*scale); //sml::lerp(0.1f, 1.0f, scale * scale);

						kernel[i] *= scale;
					} else {
						kernel[i] *= dis_y(gen);
					}		
				}

				printf( "%03.3f %03.3f %03.3f \n", kernel[i].x, kernel[i].y, kernel[i].z);
			}
}