예제 #1
0
void simulationGrid::init(){ 

	int i,tmpAgents;	

	/* Initialize random number generator's seed to the current time */
	srand(time(NULL));
	
     	/* Initialize Simulation Grid */ 
	valid(1);
	glLoadIdentity(); 
	glEnable(GL_BLEND);
	glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glMatrixMode (GL_PROJECTION);     
	glLoadIdentity();
	glOrtho(0, w(), 0, h(), -100, 100);                
	glMatrixMode (GL_MODELVIEW);
	glColor4d(0.2,0,1,0.2); 	

	if(!resized)
	{
		/* Initial Parameters */
		gui_linear_lattice_dimension = LINEAR_LATTICE_DIMENSION_INIT;  
		gui_delta = DELTA_INIT;
		gui_pos_traits  = POS_TRAITS_INIT;
		simSpeed = SIM_SPEED_INIT;
	}
	if(resized)
	{
		if(latticeOn)
		{
			tmpAgents = gui_linear_lattice_dimension*gui_linear_lattice_dimension;
			m.init(gui_linear_lattice_dimension, tmpAgents, NFEATURES, gui_pos_traits, OUTDEGREE, gui_delta,1, w(), h());
		}
		else if(kleinbergOn)
		{
			tmpAgents = gui_linear_lattice_dimension*gui_linear_lattice_dimension;
			m.init(gui_linear_lattice_dimension, tmpAgents, NFEATURES, gui_pos_traits, OUTDEGREE, gui_delta,0, w(), h());
		}
		else
		{
			tmpAgents = gui_linear_lattice_dimension*gui_linear_lattice_dimension;
			m.init(gui_linear_lattice_dimension, tmpAgents, NFEATURES, gui_pos_traits, OUTDEGREE, gui_delta,-1, w(), h());
		}
		resized = false;
	}
	else if(initModel && latticeOn)
	{ 
		m.init(LINEAR_LATTICE_DIMENSION_INIT, AGENTS, NFEATURES, POS_TRAITS_INIT, OUTDEGREE, DELTA_INIT,1, w(), h());   
		initModel=false;
		restart = false; 
	}
	else if(initModel && kleinbergOn)
	{ 
		m.init(LINEAR_LATTICE_DIMENSION_INIT, AGENTS, NFEATURES, POS_TRAITS_INIT, OUTDEGREE, DELTA_INIT,0, w(), h());   
		initModel=false; 
		restart = false;
	}
	else if(initModel && randomOn)
	{ 
		printf("Arrivo qua Init modello \n");
		m.init(LINEAR_LATTICE_DIMENSION_INIT, AGENTS, NFEATURES, POS_TRAITS_INIT, OUTDEGREE, DELTA_INIT,-1, w(), h());   
		initModel=false; 
		restart = false;
	}
	else
	{		
		restart = true;
	}
	
}
예제 #2
0
void simulationGrid::draw() {	

	int i, j, k, tmpAgents;
	
	/* Graphic Reinitialization */
	if (!valid())
	{
		init();		
		resized = true;
	}
	
	/* If Restart Button is pressed */
	if(restartB)
	{
		tmpAgents = gui_linear_lattice_dimension*gui_linear_lattice_dimension;
     		m.init(gui_linear_lattice_dimension, tmpAgents, NFEATURES, gui_pos_traits, OUTDEGREE, gui_delta, m.maxSide, w(), h());         
		restartB = false;
		simStepLabel->value(0);
		restart = false;
		restartS = true;
	}	
	/* Catch parameters from gui and reinit if needed */
	else if((m.delta != gui_delta) || (m.pos_traits != gui_pos_traits ) || (m.linear_lattice_dimension != gui_linear_lattice_dimension) || restart)
	{
		tmpAgents = gui_linear_lattice_dimension*gui_linear_lattice_dimension;
		if(latticeOn)
		{
     			m.init(gui_linear_lattice_dimension, tmpAgents, NFEATURES, gui_pos_traits, OUTDEGREE, gui_delta, 1,w(), h());
			restartS = true;
		}
		else if(kleinbergOn)
		{
			m.init(gui_linear_lattice_dimension, tmpAgents, NFEATURES, gui_pos_traits, OUTDEGREE, gui_delta, 0, w(), h());
			restartS = true;
		}
		else
		{
			m.init(gui_linear_lattice_dimension, tmpAgents, NFEATURES, gui_pos_traits, OUTDEGREE, gui_delta, -1, w(), h());
			restartS = true;
		}         
		restart = false;
	}
	
	/* Clear display */
	glClear(GL_COLOR_BUFFER_BIT);
	if(linkVisualization)
	{	
		for (i=0;i<m.agents;i++)
		{
			link(i);
		}
	}

	/* Draws all Agents */
	for(i=0; i<m.agents;i++)
	{
		drawAgents(i,MIN(w(),h()));
	}

	/* Simulation Step */
	m.step();

	/* Compute Regions */
	computeRegions();

	g1->redraw();
	g2->redraw();
	g3->redraw();
}