예제 #1
0
int scheduleEvent(Ball **ball, Heap *heap, int index)
{
    int j;
    insertToHeap(heap, eventWallCollideX(heap, ball[index]));
    insertToHeap(heap, eventWallCollideY(heap, ball[index]));
    for(j = 0; j < PARTICLE_COUNT; j++)
        insertToHeap(heap, eventBallCollide(heap, ball[index], ball[j]));
}
예제 #2
0
int main()
{
    printf("Enter Time Limit : ");
    scanf("%f",&TIME_LIMIT);
    int i, j;
    srand(time(NULL));
    Heap *heap;
    Ball **ball;
    Interaction *nextCollision;
    heap = initHeap();
    ball = (Ball **)malloc(PARTICLE_COUNT * sizeof(Ball *));
    gnuplotPipe = initPipe();
    for(i = 0; i < PARTICLE_COUNT; i++)
    {
        logFile[i] = initGraph(i);
        gnuplotGraphPipe[i] = initGraphPipe(i);
    }
    for(i = 0; i < PARTICLE_COUNT; i++)
    {
        ball[i] = initBallRandom(i);
        insertToHeap(heap, eventWallCollideX(heap, ball[i]));
        insertToHeap(heap, eventWallCollideY(heap, ball[i]));
        for(j = 0; j < i; j++)
            insertToHeap(heap, eventBallCollide(heap, ball[i], ball[j]));
    }
    while(sim_time < TIME_LIMIT)
    {
        nextCollision = getNextEvent(heap);
        simulateTo(ball, nextCollision->tstamp);
        printf("Collision at t=%lf\n", sim_time);
        resolveCollision(nextCollision);
        removeFromHeap(heap, nextCollision->interactee->id);
        scheduleEvent(ball, heap, nextCollision->interactee->id);
        if(nextCollision->interactor != NULL)
        {
            removeFromHeap(heap, nextCollision->interactor->id);
            scheduleEvent(ball, heap, nextCollision->interactor->id);
        }
    }
    fprintf(gnuplotPipe, "quit\n");
    saveGraph(ball);
    showGraph(ball);
    return 0;
}
예제 #3
0
heap* createHeap(graph* gr, int origin,int* size_val)
{
	int i;
	heap* h = (heap*)malloc(sizeof(heap));
	int size=0;/*heap array size*/
	edge_st* temp;
        bzero(h,sizeof(heap));
		
	for(i=1;i<gr->num;i++)
	{
		temp = (edge_st*)malloc(sizeof(edge_st));
		temp->source = i;
		temp->length = (i==origin)?0:INT_MAX;
		insertToHeap(h,temp,&size);
	}
	*size_val = size;
	return h;
}