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:
| M | roads.c | | | 33 | +++++++++++++++++++++++++++++---- |
| M | roads.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);