From aac7fec8fabd3a5fb84c7f77bddc6183ed633b30 Mon Sep 17 00:00:00 2001 From: Yoann Date: Mon, 17 Oct 2011 16:08:55 +0200 Subject: [PATCH 1/2] =?UTF-8?q?R=C3=A9flexions=20avec=20YB=20sur=20l'algo?= =?UTF-8?q?=20de=20g=C3=A9n=C3=A9ration=20de=20routes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roads.c | 6 ++++-- roads.md | 17 +++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/roads.c b/roads.c index 0c4534e..59b8b8d 100644 --- a/roads.c +++ b/roads.c @@ -30,13 +30,15 @@ int main() { Vertex points[] = { { .x=10, .y=10 }, { .x=790, .y=10 }, + { .x=600, .y=300 }, { .x=790, .y=590 }, { .x=10, .y=590 }, }; + int n = 5; svg_start(800,600); int i; - for (i = 0; i < 4; i++) { - svg_line(&(points[i]), &(points[(i+1)%4])); + for (i = 0; i < n; i++) { + svg_line(&(points[i]), &(points[(i+1)%n])); } roads(points); svg_end(); diff --git a/roads.md b/roads.md index 924ed26..2f3e07b 100644 --- a/roads.md +++ b/roads.md @@ -58,11 +58,11 @@ Comme une grille, mais les angles ne sont pas vraiment à 90°, et il y a beaucoup de longues rues dans l'une ou l'autre des directions. .________________________. - | | | | | - |___|________|______|____| - | | |______| - |_________|_______| | - |______|__________|______| + | | | | | + |___|________|______|____| + | | |______| + |_________|_______| | + |______|__________|______| TODO : trouver un algo pour générer des « murs » @@ -86,7 +86,7 @@ monter ou descendre très légèrement pour rejoindre une autre ligne. * Partir d'un point, et choisir le point à X de distance qui minimise le dénivellé -* Condinuer à partir du point ainsi créé, en s'interdisant les retours +* Continuer à partir du point ainsi créé, en s'interdisant les retours en arrière trop brutaux * Arrêter la ligne quand le dénivellé devient trop important, ou quand on rejoint une autre ligne. @@ -128,3 +128,8 @@ Intérieur d'un polygone Pouvoir sélectionner aléatoirement des points à l'intérieur d'un polygone (pour pouvoir faire les centres des réseaux concentriques par exemple). + +Algo déformation de coordonées +============================== + +Partir d'une grille idéale carrée et appliquer des déformations de 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. From c14f0fd916eac6cf926e794dd284ba4abc3ce919 Mon Sep 17 00:00:00 2001 From: Yoann Date: Tue, 18 Oct 2011 09:36:59 +0200 Subject: [PATCH 2/2] =?UTF-8?q?D=C3=A9finition=20d'un=20structure=20de=20r?= =?UTF-8?q?oute=20simple=20et=20affichage=20d'un=20premier=20quadrillage.?= =?UTF-8?q?=20Le=20mod=C3=A8le=20de=20donn=C3=A9e=20est=20pour=20l'instant?= =?UTF-8?q?=20trop=20simple=20pour=20stocker=20toute=20les=20informations?= =?UTF-8?q?=20n=C3=A9cessaires.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roads.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 5 deletions(-) diff --git a/roads.c b/roads.c index 59b8b8d..4dac2c3 100644 --- a/roads.c +++ b/roads.c @@ -1,4 +1,5 @@ #include +#include typedef struct Vertex { int x; @@ -26,6 +27,62 @@ void roads(Polygon* quartier) { svg_line(¢er, &(quartier[0])); } +/* Fonctions de Yoann suffixée par "Y" */ +typedef struct roadNodeY { + Vertex *v; + struct roadNodeY *next; + struct roadNodeY *previous; +} roadNodeY; + +const int maxSubDivision = 6; // Nombre de subdivisions max en hauteur et largeur. + +// 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(int x) { + return x/maxSubDivision; +} + +// Transforme des coordonnées du plan en coordonées du tableau sur y. +int toY(int y) { + return y/maxSubDivision; +} + +void carreY() { + roadNodeY ***nodesGrid = (roadNodeY***) malloc(sizeof(roadNodeY**)*maxSubDivision); + int i = 0; + int j = 0; + int size = 500; + for(i=0;iv = (Vertex*) malloc(sizeof(Vertex)); + rn->v->x = i*size/maxSubDivision; + rn->v->y = j*size/maxSubDivision; + rn->next = NULL; + rn->previous = NULL; + nodesGrid[i][j] = rn; + } + } + + int a,b; + for(i=0;i= 0 && a < maxSubDivision && b >= 0 && b < maxSubDivision) { + svg_line(rn->v,nodesGrid[a][b]->v); + } + } + } + rn = NULL; + } + } + } +} + int main() { Vertex points[] = { { .x=10, .y=10 }, @@ -36,11 +93,14 @@ int main() { }; int n = 5; svg_start(800,600); - int i; - for (i = 0; i < n; i++) { - svg_line(&(points[i]), &(points[(i+1)%n])); - } - roads(points); + carreY(); + //int i; + //for (i = 0; i < n; i++) { +// svg_line(&(points[i]), &(points[(i+1)%n])); +// } +n=n; + //roads(points); + points[0] = points[0]; svg_end(); return 0; }