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:
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`.