www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 53858d9b85f18416b03151825237f12ecca7e749
parent 98a918518e47882244d6bb4b9e52b1ec66ba1e6e
Author: Yoann <yoann.b87@voila.fr>
Date:   Fri, 28 Oct 2011 09:15:54 +0200

Ajout de la detection et accrochage sur des points proches.

Diffstat:
Mroads.c | 31++++++++++++++++++++++---------
1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/roads.c b/roads.c @@ -208,8 +208,7 @@ Vertex* grid_getNearestVertex(Vertex *v) { int distance = maxSegmentSize*2; Vertex *tmp = NULL; int count = 0; - fprintf(stderr,"colones : %d\n",nbXSubDivision); - fprintf(stderr,"lignes : %d\n",nbYSubDivision); + for(i=x-1; i<x+2; i++) { for(j=y-1; j<y+2; j++,count++) { if(i >= 0 && i < nbXSubDivision && y >= 0 && y < nbYSubDivision) { @@ -218,9 +217,7 @@ Vertex* grid_getNearestVertex(Vertex *v) { int ind; - fprintf(stderr,"passage %d\t\t %d %d\n",count,i,j); for(tmp = vtx[0], ind = 0; tmp != NULL && ind < maxNodesInGrid; tmp = vtx[ind++]) { - fprintf(stderr,"noed\n"); int dist = distBetween(v,tmp); if(dist < distance) { distance = dist; @@ -402,19 +399,33 @@ typedef struct Map { } Map; Vertex* vertex_init(Map* m, int x, int y) { - // TODO : s'il y a déjà un point dans la case de la grille pour - // `(x,y)`, le renvoyer sans rien modifier. - Vertex* v = &(m->vertices[m->vertices_firstFree++]); + if(m->vertices_firstFree >= vertices_array_size) + return NULL; + + Vertex* v; + Vertex tmp = { .x = x, .y = y}; + Vertex *nearest = grid_getNearestVertex(&tmp); + + if(nearest != NULL && distBetween(&tmp,nearest) < 2) + v = nearest; + //v = &(m->vertices[m->vertices_firstFree++]); + else + v = &(m->vertices[m->vertices_firstFree++]); + // TODO : insérer v dans la grille de m. m=m; v->x = x; v->y = y; v->s = NULL; + grid_insertVertex(v); return v; } Segment* segment_init(Map* m, Vertex* u, Vertex* v) { + if(v == NULL || m->segments_firstFree >= segments_array_size) + return NULL; + Segment* s = &(m->segments[m->segments_firstFree++]); s->u = u; s->v = v; @@ -463,7 +474,7 @@ void segment_display(Segment* s) { void forceFields() { Map m; m.vertices[0] = (Vertex){ .x = 400, .y = 300, .s = NULL}; - m.vertices[1] = (Vertex){ .x = 410, .y = 290, .s = NULL}; + m.vertices[1] = (Vertex){ .x = 400, .y = 290, .s = NULL}; m.vertices_firstUnseen = 1; m.vertices_firstFree = 2; @@ -472,8 +483,10 @@ void forceFields() { m.vertices[1].s = &(m.segments[0]); m.segments_firstFree = 1; - //grid_initvGrid(800, 600, 40); + grid_initvGrid(800, 600, 10); // TODO : insérer vertices[0] dans la grille. + grid_insertVertex(&(m.vertices[0])); + grid_insertVertex(&(m.vertices[1])); int i; while(m.vertices_firstFree < vertices_array_size-2) {