www

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

commit 54fecc3c759b4bc1f32188b9fb60eeace8cce685
parent c963a9ed9658d0aed19f2a3307a023939111cb9b
Author: Yoann <yoann.b87@voila.fr>
Date:   Wed, 19 Oct 2011 19:30:24 +0200

Fin de la fonciton d'initialisation de la grille de stockage de nœds de
routes. Et adaptation des autres fonctions.

Diffstat:
Mroads.c | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mroads.h | 10+++++++---
2 files changed, 66 insertions(+), 23 deletions(-)

diff --git a/roads.c b/roads.c @@ -30,23 +30,43 @@ void roads(Polygon* quartier) { // TODO Fusionner les deux fonctions et retourner une paire de valeurs. // Transforme des coordonnées du plan en coordonées du tableau sur x. int toX(Vertex *v) { - return v->x*(maxSubDivision-1)/quarterSize; + fprintf(stderr,"%d\n",nbXSubDivision); + int x = v->x*(nbYSubDivision-1)/quarterWidth; + if(x >= nbXSubDivision) + fprintf(stderr,"depassement du tableau sur x\n"); + return x; } // Transforme des coordonnées du plan en coordonées du tableau sur y. int toY(Vertex *v) { - return v->x*(maxSubDivision-1)/quarterSize; + int y = v->x*(nbYSubDivision-1)/quarterHeight; + if(y >= nbYSubDivision) + fprintf(stderr,"Depassement du tableau sur y\n"); + return y; } -void grid_initNodesGrid(int size) { - nodesGrid = (roadNodeY****) malloc(sizeof(roadNodeY***)*size); +/* Initialise la grille de nœds. + * @param int width : Largeur du quartier à remplir. + * @param int height : Hauteur du quartier à remplir. + * @param int maxSegmentSize : Taille maximale d'un segment de route. + */ +void grid_initNodesGrid(int width, int height, int segmentSize) { + int xSize, ySize; + xSize = (int)(width/segmentSize); + ySize = (int)(height/segmentSize); + + nodesGrid = (roadNodeY****) malloc(sizeof(roadNodeY***)*xSize); int i,j,k; - maxSubDivision = size; - - for(i=0;i<size;i++) { - nodesGrid[i] = (roadNodeY***) malloc(sizeof(roadNodeY**)*size); - for(j=0;j<size;j++) { + maxSegmentSize = segmentSize; + nbXSubDivision = xSize; + nbYSubDivision = ySize; + quarterWidth = width; + quarterHeight = height; + + for(i=0;i<xSize;i++) { + nodesGrid[i] = (roadNodeY***) malloc(sizeof(roadNodeY**)*ySize); + for(j=0;j<ySize;j++) { nodesGrid[i][j] = (roadNodeY**) malloc(sizeof(roadNodeY*)*maxNodesInGrid); for(k=0;k<maxNodesInGrid;k++) nodesGrid[i][j][k] = NULL; @@ -54,6 +74,20 @@ void grid_initNodesGrid(int size) { } } +void grid_drawGrid() { + int i, j; + + for(i=0;i<nbXSubDivision-1;i++) + for(j=0;j<nbYSubDivision-1;j++) { + Vertex v = {i*maxSegmentSize,j*maxSegmentSize}; + Vertex u = {(i+1)*maxSegmentSize,j*maxSegmentSize}; + svg_line(&v,&u); + u.x = i*maxSegmentSize; + u.y = (j+1)*maxSegmentSize; + svg_line(&v,&u); + } +} + short grid_insertRoadNode(roadNodeY *rn) { if(rn == NULL || rn->v == NULL) return 0; @@ -87,12 +121,12 @@ void addRoadNode(roadPointY *rp, roadNodeY *rn) { roadNodeY* grid_getNearestRoadNode(Vertex *v) { roadNodeY **nr = grid_getNearNodes(v); roadNodeY *nearestNode = NULL; + if(nr[0] == NULL) + return NULL; + roadNodeY *tmp = nr[0]; int distance = distBetween(v,tmp->v); - if(tmp == NULL) - return NULL; - nearestNode = tmp; int i = 0; @@ -120,7 +154,7 @@ roadNodeY** grid_getNearNodes(Vertex *v) { void carreY() { int size = 500; - grid_initNodesGrid(6); + grid_initNodesGrid(800,600,10); roadPointY *roada = (roadPointY*) malloc(sizeof(roadPointY)); roadPointY *roadb = (roadPointY*) malloc(sizeof(roadPointY)); roadNodeY *rn; @@ -128,7 +162,7 @@ void carreY() { roadNodeY *common = NULL; int i; - for(i=0;i<40;i++) { + for(i=0;i<36;i++) { rn = (roadNodeY*)malloc(sizeof(roadNodeY)); v = (Vertex*) malloc(sizeof(Vertex)); @@ -140,17 +174,19 @@ void carreY() { addRoadNode(roada,rn); } - for(i=0;i<30;i++) { + for(i=0;i<20;i++) { rn = (roadNodeY*)malloc(sizeof(roadNodeY)); v = (Vertex*) malloc(sizeof(Vertex)); v->x = (i+1)*22; - v->y = ((i+1)%5)*(61%(i+2))+160; + v->y = ((i+1)%5)*(61%(i+2))+150; rn->v = v; - if(i%5) if(grid_getNearestRoadNode(v) != NULL) - rn = grid_getNearestRoadNode(v); - //rn = common; - addRoadNode(roadb,rn); + if(v->x < 800 && v->y < 600) { + if(i%5 == 0) if(grid_getNearestRoadNode(v) != NULL) + rn = grid_getNearestRoadNode(v); + //rn = common; + addRoadNode(roadb,rn); + } } roadPointY *rd = roada; @@ -185,6 +221,9 @@ int main() { //for (i = 0; i < n; i++) { // svg_line(&(points[i]), &(points[(i+1)%n])); // } + + grid_drawGrid(); + n=n; //roads(points); points[0] = points[0]; diff --git a/roads.h b/roads.h @@ -35,15 +35,19 @@ typedef struct roadPointY { } roadPointY; roadNodeY ****nodesGrid; -short maxSubDivision; +short nbXSubDivision; +short nbYSubDivision; +short maxSegmentSize; short maxNodesInGrid = 10; -int quarterSize = 600; +int quarterWidth; +int quarterHeight; int toX(Vertex*); int toY(Vertex*); -void grid_initNodesGrid(int size); +void grid_initNodesGrid(int w, int h, int maxSegmentSize); short grid_insertRoadNode(roadNodeY *rn); void addRoadNode(roadPointY *rp, roadNodeY *rn); int distBetween(Vertex *v, Vertex *u); roadNodeY** grid_getNearNodes(Vertex *v); roadNodeY* grid_getNearestRoadNode(Vertex *v); +void grid_drawGrid();