www

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

commit 811e425a619209837e82f770cd0824b070753369
parent f8f3d04e0f48053316526e4df5f138effd3c8efe
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Sat, 22 Oct 2011 18:39:46 +0200

Algo champs de force dans `roads.md` .

Diffstat:
Mroads.c | 14++++++++++----
Mroads.h | 16++++++++--------
Mroads.md | 16++++++++++++++++
3 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/roads.c b/roads.c @@ -69,7 +69,7 @@ cartesianCoord* ptc(Vertex *origin, short angle, short length) { /* Convertion de coordonnées cartésiennes en coordonnées polaires. * @param Vertex* origin : Origine du vecteur. - * * @param Vertex* end : Fin 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) { @@ -80,7 +80,7 @@ polarCoord* ctp(Vertex *origin, Vertex *end) { return pc; } -/* Initialise la grille de nœds. +/* Initialise la grille de nœuds. * @param int width : Largeur du quartier à remplir. * @param int height : Hauteur du quartier à remplir. * @param int maxSegmentSize : Taille maximale d'un segment de route. @@ -120,8 +120,8 @@ void grid_initNodesGrid(int width, int height, int segmentSize) { */ Vertex* intersectionBetween(Vertex *va, Vertex *vb, Vertex *ua, Vertex *ub) { 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; + 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; Ix = vb->x - va->x; Iy = vb->y - va->y; @@ -183,6 +183,8 @@ void addRoadNode(roadPointY *rp, roadNodeY *rn) { rpp->next = NULL; rpp->rn = rn; rp->next = rpp; + // TODO : previous + // 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 @@ -392,6 +394,10 @@ void carreY() { } } +void genroads() { + +} + int main() { Vertex points[] = { { .x=10, .y=10 }, diff --git a/roads.h b/roads.h @@ -22,23 +22,23 @@ typedef struct roadNodeY { struct intersectionY **intersec; } roadNodeY; +typedef struct roadPointY { + struct roadPointY *first; + struct roadPointY *next; + struct roadPointY *previous; + roadNodeY *rn; +} roadPointY; + /* Définition d'une intersection. Permet de savoir quelle route est concernée par cette intersection. * Elle permet également de changer la navigation por parcourir une nouvelle route. * */ typedef struct intersectionY { - roadNodeY *roadId; // Premier nœd de la route qui lui sert d'identifiant. + roadPointY *roadId; // Premier point de la route qui lui sert d'identifiant. roadNodeY *next; // Nœd de la route juste après l'intersection. roadNodeY *previous; // Nœd de la route juste avant l'intersection. int zIndex; // Index sur l'axe z de la route. } intersectionY; -typedef struct roadPointY { - struct roadPointY *first; - struct roadPointY *next; - struct roadPointY *previous; - roadNodeY *rn; -} roadPointY; - typedef struct cartesianCoord { int x; // Coordonnées sur x. int y; // Coordonnées sur y. diff --git a/roads.md b/roads.md @@ -154,3 +154,19 @@ coordonnées dessus, plus une fonction de densité de points (taille des bâtiments). Dé-transformer la fonction de densité de points, l'utiliser pour générer la grille parfaite avec des densités différentes, puis transformer cette grille. + +Algo champs de force +==================== + +* Choisir des champs de force. `f(x,y,vecteur,n)` renvoie le nième + vecteur de routes qu'on peut faire partir du point `(x,y)`, + lorsqu'on y arrive par la direction vecteur. +* Initialiser `fifo` à vide. +* Choisir un point de départ aléatoire, une direction aléatoire, et + insérer `(x,y,vecteur,0)` dans `fifo`. +* Tant qu'on n'a pas suffisemment créé de routes : + * Prendre le point `(x,y,vecteur,n)` en tête de `fifo`. + * new = f(x,y,vecteur,n). + * Si new != NULL, tracer le segment `(x,y)--(new)`. + * insérer `(x,y,vecteur,n+1)` dans `fifo` si new dit que n+1 existe. + * insérer `(new,(x,y)--(new),0) dans `fifo`.