From ffdf57aafa63c15453813c8cbfb84c5fa915498f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Tue, 25 Oct 2011 19:53:46 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Algo=20de=20g=C3=A9n=C3=A9ration=20de=20rou?= =?UTF-8?q?tes=20pas=20fini=20avec=20utilisation=20des=20vertex.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roads.c | 86 +++++++++++++++++++++++++++++++++++++++++++++----------- roads.h | 3 ++ roads.md | 2 +- 3 files changed, 73 insertions(+), 18 deletions(-) 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. From 1154c072b53e1d7e385f48690cc1614e44ad5ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Wed, 26 Oct 2011 01:20:43 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Code=20en=20commentaire=20pour=20g=C3=A9n?= =?UTF-8?q?=C3=A9rer=20un=20r=C3=A9seau=20de=20routes=20perpendiculaires.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roads.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/roads.c b/roads.c index 28cb787..abea54d 100644 --- a/roads.c +++ b/roads.c @@ -394,12 +394,6 @@ typedef struct Map { // vertices. } Map; -void fv(Map* m, Vertex* v) { - // TODO : tracer une ou des routes, en utilisant segment_to - v=v; - m=m; -} - 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. @@ -430,6 +424,24 @@ Segment* segment_to(Map* m, Vertex* u, int x, int y) { return s; } +void fv(Map* m, Vertex* from) { + v=v; + m=m; + // Tracer une ou des routes, en utilisant segment_to. + + // Vertex existing = (v->s->u == from ? v->s->v : v->s->u); + + // Segment dans la continuation + // Vertex new1 = vertex_add(from, vertex_substract(from, existing)); // from + (from - existing) + // segment_to(m, from, new1.x, new2.y); + + // Segment perpendiculaire + // polar = ctp(from, existing) + // polar.angle += 90; + // Vertex new2 = ptc(polar); + // segment_to(m, from, new2.x, new2.y); +} + void segment_display(Segment* s) { printf("", s->u->x, s->u->y, s->v->x, s->v->y);