www

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

commit 994a0ac085ce3720409ab4c474b543048cb3b78e
parent 0f7cbe176e50991f6dc1d81df5f59662887e5321
Author: Yoann <yoann.b87@voila.fr>
Date:   Fri, 21 Oct 2011 19:35:32 +0200

Ajout des deux fonction de conversion de coordonnées polaires et
cartésiennes.

Diffstat:
Mroads.c | 33+++++++++++++++++++++++++++++----
Mroads.h | 12++++++++++++
2 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/roads.c b/roads.c @@ -42,19 +42,44 @@ void roads(Polygon* quartier) { // Transforme des coordonnées du plan en coordonées du tableau sur x. int toX(Vertex *v) { int x = v->x*(nbXSubDivision)/quarterWidth; - if(x >= nbXSubDivision) - fprintf(stderr,"depassement du tableau sur x\n"); + if(x >= nbXSubDivision) return 0; return x; } // Transforme des coordonnées du plan en coordonées du tableau sur y. int toY(Vertex *v) { int y = v->y*(nbYSubDivision)/quarterHeight; - if(y >= nbYSubDivision) - fprintf(stderr,"Depassement du tableau sur y\n"); + if(y >= nbYSubDivision) return 0; return y; } +/* Convertion de coordonnées polaires en coordonnées cartésiennes. + * @param Vertex* origin : Origine du vecteur. + * @param short angle : Angle. + * @param short length : Taille du vecteur. + * @return struct cartesianCoord* : Les coordonnées cartésiennes du point d'arrivée. + */ +cartesianCoord* ptc(Vertex *origin, short angle, short length) { + cartesianCoord *cc = (cartesianCoord*) malloc(sizeof(cartesianCoord)); + cc->x = origin->x + cos(M_PI*angle/180)*length; + cc->y = origin->y + sin(M_PI*angle/180)*length; + + return cc; +} + +/* Convertion de coordonnées cartésiennes en coordonnées polaires. + * @param Vertex* origin : Origine du vecteur. + * * @param Vertex* end : Fin du vecteur. + * @return struct polarCoord* : Les coordonnées polaires du point d'arrivée. + */ +polarCoord* ctp(Vertex *origin, Vertex *end) { + polarCoord *pc = (polarCoord*) malloc(sizeof(polarCoord)); + pc->length = distBetween(origin,end); + pc->angle = acos((end->x-origin->x)/pc->length); + + return pc; +} + /* Initialise la grille de nœds. * @param int width : Largeur du quartier à remplir. * @param int height : Hauteur du quartier à remplir. diff --git a/roads.h b/roads.h @@ -34,6 +34,16 @@ typedef struct roadPointY { roadNodeY *rn; } roadPointY; +typedef struct cartesianCoord { + int x; // Coordonnées sur x. + int y; // Coordonnées sur y. +} cartesianCoord; + +typedef struct polarCoord { + int angle; // Angle en degrès. + int length; // Norme du vecteur. +} polarCoord; + roadNodeY ****nodesGrid; short nbXSubDivision; short nbYSubDivision; @@ -52,3 +62,5 @@ roadNodeY** grid_getNearNodes(Vertex *v); roadNodeY** grid_getNearNodes2(int x, int y); roadNodeY* grid_getNearestRoadNode(Vertex *v); void grid_drawGrid(); +cartesianCoord* ptc(Vertex *origin, short angle, short length); +polarCoord* ctp(Vertex *origin, Vertex *end);