www

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

commit b61012b3801d38b42e213aca02e5572459e9c8ea
parent 5383c144581337be9ce92c7849fa28c70bd41b93
Author: Yoann <yoann.b87@voila.fr>
Date:   Mon, 24 Oct 2011 20:19:11 +0200

Début d'un grand nettoyage dans le code de roads.

Diffstat:
Mroads.c | 134++++++++++++++-----------------------------------------------------------------
Mroads.h | 1-
2 files changed, 24 insertions(+), 111 deletions(-)

diff --git a/roads.c b/roads.c @@ -31,35 +31,9 @@ void roads(Polygon* quartier) { } -/* Fonctions de Yoann suffixée par "Y" */ - -/* !!!!!!!! Modification de façon de gérer les routes. - * Au départ : - * - Une liste de routes vide. - * - Une grille de nœd de routes vide qui contiendra les nœds de de toutes les routes. - * Initialisation : - * - On initialise la grille avec la taille de la zone à remplir et le nombre max de nœds dans chaque cases. - * - On crée une ou plusieurs routes sue l'on insère dans la liste de routes et on place les nœds de - * ces routes dans la grille. - * Fonctionnement : - * -- La fonction addRoadNode : - * Ajoute un nœed à la route depuis un certain point de route. Si ce point de route n'est pas le dernier - * autrement dit si on crée une division de route alors la nouvelle voie créée constitue une nouvelle route. Et le - * point de route situé à l'intersection est le point d'origine de la nouvelle route. - */ - /* ForceField revision : - * - Initialisation de la grille en fonction de la zone à couvrir. - * - Création d'une ou plusieurs routes de départ et insertion dan sla liste de routes. - * - Création d'un file (fifo) permettant l'avancé parrallèle de la création de routes. - * Cette liste sera constituée de structures à deux champs, l'identifiant de la route et le nœd où on s'est arrêté. - * - Tant que l'on à pas atteint la fin de la file on utilise le premier point de route non vu. - * Et on ajoute à la route le ou les nouveau segments retournées par la fonction f potentiellement filtrée. - * Ces nouveau morceaux de routes seraont également ajouté dans la file pour qu'il puissent faire l'objet d'un - * nouveau départ de route(s). Si une route est créer par division de route existante alors cette route sera ajoutée dans la liste de routes. - * ... - * !!!!!!!!! */ +/* Fonctions de Yoann suffixée par "Y" */ /* Initialisation de la liste de routes. */ @@ -73,7 +47,6 @@ void initRoadslIst(int nb){ * le nombre et les portions de routes auxquelles il appartient. */ -// 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) { int x = v->x*(nbXSubDivision)/quarterWidth; @@ -158,8 +131,10 @@ void grid_initNodesGrid(int width, int height, int segmentSize) { * @param Vertex *vb : Point d'arrivé du second segment. * @return Vertex* : Coordonnées du point d'intersection si il existe, sinon NULL. */ -Vertex* intersectionBetween(Vertex *va, Vertex *vb, Vertex *ua, Vertex *ub) { - Vertex *inter = (Vertex*) malloc(sizeof(Vertex)); +Vertex* intersectionBetween(Segment *sega, Segment *segb) { + sega = sega; + segb = segb; + /*Vertex *inter = (Vertex*) malloc(sizeof(Vertex)); float m, k; // Coordonnées de l'intersection des vecteurs sur les droites. int Ix, Iy, Jx, Jy; // Vecteur I et J corespondant au segment v et u; @@ -177,8 +152,8 @@ Vertex* intersectionBetween(Vertex *va, Vertex *vb, Vertex *ua, Vertex *ub) { } else return NULL; - - return inter; + */ + return NULL; //return inter; } @@ -213,42 +188,6 @@ short grid_insertRoadNode(roadNodeY *rn) { } -roadStep* addRoadNode(roadPointY *rp, roadPointY *rpc, roadNodeY *rn) { - roadStep * rStep = (roadStep*) malloc(sizeof(roadStep)); - - if(rpc == rp) { - rp->next = NULL; - rp->previous = NULL; - rp->rn = rn; - rStep->roadId = rp; - rStep->rpc = rp; - return rStep; - } - - roadPointY *rpp = (roadPointY*) malloc(sizeof(roadPointY)); - rpp->next = NULL; - - if(rpc->next != NULL) { - rpp->previous = NULL; - rpp->rn = rn; - rStep->roadId = rpp; - rStep->rpc = rpp; - return rStep; - } - else { - rpp->previous = rpc; - rpp->rn = rn; - rpc->next = rpp; - rStep->roadId = rp; - rStep->rpc = rpp; - } - - return rStep; - - // TODO modif les intersections de previous. -} - - /* Retourne le nœd le plus proche dans un certain voisinage. Si aucun nœd n'est trouvé alors * la fonction renvoie NULL. * @param Vertex *v : Le nœd pour lequel on souhaite trouver un nœd proche. @@ -292,30 +231,15 @@ roadNodeY* grid_getNearestRoadNode(Vertex *v) { } -/* Ajoute un segment de route à la fin d'une route. - * Le point d'origine du segment est le dernier de la route actuellement en place. Il est passé en paramètre pour - * éviter le parcour de la route entière pour le trouver. - * Le point d'arrivé peut-etre modifié suivant deux règles principales. - * - Un nœd de route existe proche de l'endroit ou doit ce terminer le segment dans ce cas - * on "fusionne" les deux le point existant devient le point d'arrivé du segment. - * - Un segment se trouve sur le chemin du segment que l'on souhaite placer. Dans ce cas le segment - * que l'on souhaite placer sera sectionné à l'intersection des deux segments et le points d'intersections sera - * le point d'arrivé du segment à placer. - * @param roadPointY *road : La route à laquelle on veut ajouter le segmetn. - * @param roadNodeY *rnb : Le nœd de départ du segment. - * @param roadNodeY *rne : Le nœd d'arrivé du segment. - * @param int lag : le décalage maximal autorisé pour le placement du nœd d'arrivé. - * @return roadNodeY* : Le nœd d'arrivé du vecteur potentiellement modifié. - */ -roadStep* insertRoadSegment(roadPointY *road, roadPointY *rpb, roadNodeY *rne, int lag) { - int segLength = distBetween(rpb->rn->v, rne->v); - float coef = ((float)segLength-lag)/(float)segLength; - roadNodeY *nearestNode = NULL; - Vertex tmpEnd; - roadStep * rstep; - +Vertex* insertRoadSegment(Segment *seg, int lag) { + //int segLength = distBetween(seg->u, seg->v); + //float coef = ((float)segLength-lag)/(float)segLength; + //Vertex *nearestV = NULL; + //Vertex tmpEnd; + seg = seg; + lag = lag; // ------- TODO à compléter et à vérifier. - Segment **segs = grid_getNearSegments(rpb->rn->v->x,rpb->rn->v->y); + /*Segment **segs = grid_getNearSegments(rpb->rn->v->x,rpb->rn->v->y); Segment *seg = segs[0]; int s = 0; int intersec = 0; // Booléen si intersection = 1 sinon = 0; @@ -329,25 +253,25 @@ roadStep* insertRoadSegment(roadPointY *road, roadPointY *rpb, roadNodeY *rne, i intersec = 1; } seg = segs[s++]; - } + }*/ // ------- - if(intersec == 0) { + /*if(intersec == 0) { tmpEnd.x = rpb->rn->v->x+coef*(rne->v->x - rpb->rn->v->x); tmpEnd.y = rpb->rn->v->y+coef*(rne->v->y - rpb->rn->v->y); - fprintf(stderr,"segLength : %d\n",segLength); - fprintf(stderr," ostart : %d %d\t oend : %d %d\n",rpb->rn->v->x,rpb->rn->v->y,rne->v->x,rne->v->y); - fprintf(stderr," end : %d %d\n",tmpEnd.x,tmpEnd.y); + //fprintf(stderr,"segLength : %d\n",segLength); + //fprintf(stderr," ostart : %d %d\t oend : %d %d\n",rpb->rn->v->x,rpb->rn->v->y,rne->v->x,rne->v->y); + //fprintf(stderr," end : %d %d\n",tmpEnd.x,tmpEnd.y); nearestNode = grid_getNearestRoadNode(&tmpEnd); - fprintf(stderr,"--11\n"); + //fprintf(stderr,"--11\n"); if(nearestNode != NULL && distBetween(nearestNode->v,rne->v) < lag) rne = nearestNode; } - grid_insertRoadNode(rne); - rstep = addRoadNode(road,rpb,rne); - return rstep; + grid_insertRoadNode(rne);*/ + //rstep = addRoadNode(road,rpb,rne); + return NULL; } @@ -494,16 +418,6 @@ int main() { svg_start(800,600); //carreY(); forceFields(); - Vertex a = {1,1}; - Vertex b = {4,1}; - Vertex c = {1,2}; - Vertex d = {4,0}; - - Vertex *inter = intersectionBetween(&a,&b,&c,&d); - if(inter == NULL) - fprintf(stderr,"Pas d'intersection\n"); - else - fprintf(stderr,"intersection : %d %d\n",inter->x,inter->y); //int i; //for (i = 0; i < n; i++) { diff --git a/roads.h b/roads.h @@ -68,7 +68,6 @@ int toX(Vertex*); int toY(Vertex*); void grid_initNodesGrid(int w, int h, int maxSegmentSize); short grid_insertRoadNode(roadNodeY *rn); -roadStep* addRoadNode(roadPointY *rp, roadPointY *rpc, roadNodeY *rn); int distBetween(Vertex *v, Vertex *u); roadNodeY** grid_getNearNodes(Vertex *v); roadNodeY** grid_getNearNodes2(int x, int y);