diff --git a/roads.c b/roads.c index 661bb6a..28cb787 100644 --- a/roads.c +++ b/roads.c @@ -162,8 +162,8 @@ void grid_drawGrid() { for(i=0;ivertices[m->vertices_firstFree++]); + // TODO : insérer v dans la grille de m. + m=m; + + v->x = x; + v->y = y; + v->s = NULL; + return v; +} + +Segment* segment_init(Map* m, Vertex* u, Vertex* v) { + Segment* s = &(m->segments[m->segments_firstFree++]); + s->u = u; + s->v = v; + s->nextU = u->s; + s->nextV = v->s; + u->s = s; + v->s = s; + return s; +} + +Segment* segment_to(Map* m, Vertex* u, int x, int y) { + Vertex* v = vertex_init(m, x, y); + Segment* s = segment_init(m, u, v); + return s; +} + +void segment_display(Segment* s) { + printf("", + s->u->x, s->u->y, s->v->x, s->v->y); +} void forceFields() { - /* Initialiser `fifo` à vide. */ - /* Choisir un point de départ aléatoire, une direction aléatoire, - * et insérer `(x,y,vecteur)` dans `fifo`. */ - FSegmentArray a; - a.seg[0] = (FSegment){ - .from = { .x = 400, .y = 300 }, - .to = { .x = 360, .y = 300 } - }; - a.firstUnseen = 0; - a.firstFree = 1; + Map m; + m.vertices[0] = (Vertex){ .x = 400, .y = 300, .s = NULL}; + m.vertices_firstUnseen = 0; + m.vertices_firstFree = 1; + m.segments_firstFree = 0; grid_initNodesGrid(800, 600, 40); + // TODO : insérer vertices[0] dans la grille. int i; - for (i = 0; i < FSegmentArray_SIZE; i++) { - f(fSegmentArray_pop(&a), &a); + for (i = 0; i < vertices_array_size; i++) { + if (m.vertices_firstUnseen >= m.vertices_firstFree) + break; + fv(&m, &(m.vertices[m.vertices_firstUnseen++])); } grid_drawGrid(); - for (i = 0; i < FSegmentArray_SIZE; i++) { - fsegment_display(a.seg[i]); + for (i = 0; i < m.segments_firstFree; i++) { + segment_display(&(m.segments[i])); } } - int main() { Vertex points[] = { { .x=10, .y=10 }, diff --git a/roads.h b/roads.h index ee8bc69..9b55668 100644 --- a/roads.h +++ b/roads.h @@ -5,11 +5,14 @@ typedef struct Vertex { int x; int y; + struct Segment* s; } Vertex; typedef struct Segment { Vertex *u; Vertex *v; + struct Segment* nextU; + struct Segment* nextV; } Segment; typedef Vertex Polygon; diff --git a/roads.md b/roads.md index bb8c0be..6c29fe7 100644 --- a/roads.md +++ b/roads.md @@ -164,7 +164,7 @@ Variables : * `segments` est le tableau des segments de route. Algo : -* Choisir des champs de force. `f(vertex)` ajoutes aux tableaux les +* Choisir des champs de force. `f(vertex)` ajoute aux tableaux les segments de route qu'on peut faire partir du point `(x,y)`. * Initialiser le tableau de stockage des vertices `vertices` à vide. * Initialiser le tableau de stockage des segments `segments` à vide.