commit 60766a0b335ded2b9cd9ef7feb5b39c0a846cce2
parent 0fb5a0ecfdaf7ed72b5a895d6aaf3944fe758489
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Tue, 4 Oct 2011 09:33:23 +0200
Début d'implémentation d'une représentation du terrain par un QuadTree.
Diffstat:
| A | square.c | | | 61 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 61 insertions(+), 0 deletions(-)
diff --git a/square.c b/square.c
@@ -0,0 +1,61 @@
+// get_z()
+#include "roam.h"
+
+#define INIT_VERTEX(v,xx,yy) do { (v)->x=(xx); (v)->y=(yy); (v)->z=get_z((xx),(yy)); } while(0);
+
+// QuadTree Node.
+typedef struct QTNode {
+ Vertex* center;
+ Vertex* ne;
+ Vertex* se;
+ Vertex* so;
+ Vertex* no;
+ struct QTNode* ne_child;
+ struct QTNode* se_child;
+ struct QTNode* so_child;
+ struct QTNode* no_child;
+} QTNode;
+
+typedef enum QTQuadrant {
+ QT_NE,
+ QT_SE,
+ QT_SO,
+ QT_NO,
+} QTQuadrant;
+
+void QT_split(QTNode* parent, QTQuadrant quadrant) {
+ if (quadrant == QT_NE) {
+ q = malloc(sizeof(QTNode));
+
+ q->center = malloc(sizeof(Vertex));
+ INIT_VERTEX(q->center, (parent->ne->x + parent->so->x) / 2, (parent->ne->y + parent->so->y) / 2);
+
+ q->ne = parent->ne;
+
+ q->se = malloc(sizeof(Vertex)); // TODO : réutiliser le vertex existant s'il y en a un.
+ INIT_VERTEX(q->se, parent->ne->x, (parent->ne->y + parent->so->y) / 2);
+
+ q->so = parent->center;
+
+ q->no = malloc(sizeof(Vertex)); // TODO : réutiliser le vertex existant s'il y en a un.
+ INIT_VERTEX(q->no, (parent->ne->x + parent->so->x) / 2, parent->ne->y);
+
+ parent->ne_child = q;
+ }
+}
+
+QTNode* QT_example() {
+ QTNode* q = malloc(sizeof(QTNode));
+ Vertex** v = malloc(sizeof(Vertex)*5);
+ INIT_VERTEX(v[0], 0, 0);
+ INIT_VERTEX(v[1], +1024, +1024);
+ INIT_VERTEX(v[2], +1024, -1024);
+ INIT_VERTEX(v[3], -1024, -1024);
+ INIT_VERTEX(v[4], -1024, +1024);
+ q->center = v[0];
+ q->ne = v[1];
+ q->se = v[2];
+ q->so = v[3];
+ q->no = v[4];
+ return q;
+}