www

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

commit 699e0fa52006f8358ab08d8742e5a8524cb02079
parent 96d8b12b04019cf642b2e955b40c90d975d27d79
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Thu, 24 Nov 2011 01:01:04 +0100

Vertex en 3D.

Diffstat:
Mbugs/open/2011-11-24-0045-todo | 1-
Mmain.cpp | 4++--
Mrules/batiment.cpp | 43++++++++++++++++++++++++-------------------
Mrules/rectangleroutes.cpp | 28+++++++++++++++-------------
Mvertex.cpp | 21+++++++--------------
Mvertex.hh | 5++---
6 files changed, 50 insertions(+), 52 deletions(-)

diff --git a/bugs/open/2011-11-24-0045-todo b/bugs/open/2011-11-24-0045-todo @@ -1,2 +1 @@ * Route et Carrefour à mettre à jour pour qu'ils soient sous-classe de Chose. -* Vertex en 3D diff --git a/main.cpp b/main.cpp @@ -9,8 +9,8 @@ int main() { // Générer une tile de base - Vertex ne(100, 100); - Vertex sw(0, 0); + Vertex ne(100, 100, 0); + Vertex sw(0, 0, 0); RectangleRoutes r(ne, sw); r.subdivide(); // tile.subdivide tant qu'on n'a pas le niveau de détail désiré. diff --git a/rules/batiment.cpp b/rules/batiment.cpp @@ -13,25 +13,30 @@ void Batiment::subdivide() { } void Batiment::triangulation() { - // // abcd sont les quatre coins du bâtiment. - // int h = 6; - // Vertex ah = a + Vertex(0,0,h); - // Vertex bh = b + Vertex(0,0,h); - // Vertex ch = c + Vertex(0,0,h); - // Vertex dh = d + Vertex(0,0,h); - // Vertex toit = (ah + bh + ch + dh) / 4 + Vertex(0,0,h/5); - - // // 4 Murs - // new Triangle(a,bh,ah); new Triangle(a,b,bh); // a-b-bh-ah - // new Triangle(b,dh,bh); new Triangle(b,d,dh); // b-d-dh-bh - // new Triangle(d,ch,dh); new Triangle(d,c,ch); // d-c-ch-dh - // new Triangle(c,ah,ch); new Triangle(c,a,ah); // c-a-ah-ch - - // // 1 Toit - // new Triangle(ah,toit,bh); - // new Triangle(bh,toit,dh); - // new Triangle(dh,toit,ch); - // new Triangle(ch,toit,ah); + // abcd sont les quatre coins du bâtiment. + Vertex a = this->ne; + Vertex b = Vertex(this->ne.x, this->sw.y, 0); + Vertex c = this->sw; + Vertex d = Vertex(this->sw.x, this->ne.y, 0); + + int h = 6; + Vertex ah = a + Vertex(0,0,h); + Vertex bh = b + Vertex(0,0,h); + Vertex ch = c + Vertex(0,0,h); + Vertex dh = d + Vertex(0,0,h); + Vertex toit = (ah + bh + ch + dh) / 4 + Vertex(0,0,h/5); + + // 4 Murs + new Triangle(a,bh,ah); new Triangle(a,b,bh); // a-b-bh-ah + new Triangle(b,dh,bh); new Triangle(b,d,dh); // b-d-dh-bh + new Triangle(d,ch,dh); new Triangle(d,c,ch); // d-c-ch-dh + new Triangle(c,ah,ch); new Triangle(c,a,ah); // c-a-ah-ch + + // 1 Toit + new Triangle(ah,toit,bh); + new Triangle(bh,toit,dh); + new Triangle(dh,toit,ch); + new Triangle(ch,toit,ah); } std::ostream& operator<<(std::ostream& os, const Batiment* r) { diff --git a/rules/rectangleroutes.cpp b/rules/rectangleroutes.cpp @@ -13,23 +13,25 @@ int RectangleRoutes::height() { return this->ne.y - this->sw.y; } void RectangleRoutes::subdivide() { Vertex split( hashInRange(this->seed, 0, this->sw.x + this->width()*1/4, this->sw.x + this->width()*3/4), - hashInRange(this->seed, 1, this->sw.y + this->height()*1/4, this->sw.y + this->height()*3/4) + hashInRange(this->seed, 1, this->sw.y + this->height()*1/4, this->sw.y + this->height()*3/4), + 0 // TODO ); - Carrefour c(split.add(1,1), split.add(1,-1), split.add(-1,-1), split.add(-1,1)); + Carrefour c(split + Vertex(1,1,0), split + Vertex(1,-1,0), split + Vertex(-1,-1,0), split + Vertex(-1,1,0)); // routes au NESW du carrefour - Vertex roadEndN(this->ne.y, split.x); - Vertex roadEndE(this->ne.x, split.y); - Vertex roadEndS(this->sw.y, split.x); - Vertex roadEndW(this->sw.x, split.y); - Route rn(roadEndN.add(-1,0), roadEndN.add(+1,0), split.add(+1,+1), split.add(-1,+1)); - Route re(roadEndE.add(0,+1), roadEndE.add(0,-1), split.add(+1,-1), split.add(+1,+1)); - Route rs(roadEndS.add(+1,0), roadEndS.add(-1,0), split.add(-1,-1), split.add(+1,-1)); - Route rw(roadEndW.add(0,-1), roadEndW.add(0,+1), split.add(-1,+1), split.add(-1,-1)); + // TODO : la plupart des zéros en z sont faux… + Vertex roadEndN(this->ne.y, split.x, 0); + Vertex roadEndE(this->ne.x, split.y, 0); + Vertex roadEndS(this->sw.y, split.x, 0); + Vertex roadEndW(this->sw.x, split.y, 0); + Route rn(roadEndN + Vertex(-1,0,0), roadEndN + Vertex(+1,0,0), split + Vertex(+1,+1,0), split + Vertex(-1,+1,0)); + Route re(roadEndE + Vertex(0,+1,0), roadEndE + Vertex(0,-1,0), split + Vertex(+1,-1,0), split + Vertex(+1,+1,0)); + Route rs(roadEndS + Vertex(+1,0,0), roadEndS + Vertex(-1,0,0), split + Vertex(-1,-1,0), split + Vertex(+1,-1,0)); + Route rw(roadEndW + Vertex(0,-1,0), roadEndW + Vertex(0,+1,0), split + Vertex(-1,+1,0), split + Vertex(-1,-1,0)); // Sous-quartiers Chose* rrne = sub(this->ne, re.corners[NW]); Chose* rrse = sub(re.corners[SE], rs.corners[SE]); Chose* rrsw = sub(rs.corners[NW], this->sw); - Chose* rrnw = sub(Vertex(this->sw.x, this->ne.y), rn.corners[SW]); + Chose* rrnw = sub(Vertex(this->sw.x, this->ne.y, 0), rn.corners[SW]); // TODO : stocker ces objets quelque part. (void)rrne; (void)rrse; @@ -38,8 +40,8 @@ void RectangleRoutes::subdivide() { } void RectangleRoutes::triangulation() { - Vertex nw(this->sw.x, this->ne.y); - Vertex se(this->ne.x, this->sw.y); + Vertex nw(this->sw.x, this->ne.y, 0); + Vertex se(this->ne.x, this->sw.y, 0); new Triangle(this->sw, nw, this->ne); new Triangle(this->sw, se, this->ne); } diff --git a/vertex.cpp b/vertex.cpp @@ -2,35 +2,28 @@ Vertex::Vertex() {} -Vertex::Vertex(int x, int y): x(x), y(y) {} - -Vertex Vertex::add(int dx, int dy) { - Vertex v = *this; - v.x += dx; - v.y += dy; - return v; -} +Vertex::Vertex(int x, int y, int z): x(x), y(y), z(z) {} std::ostream& operator<<(std::ostream& os, const Vertex& v) { - return os << "(" << v.x << "," << v.y << ")"; + return os << "(" << v.x << "," << v.y << "," << v.z << ")"; } Vertex operator+(const Vertex& u, const Vertex& v) { - return Vertex(u.x + v.x, u.y + v.y); + return Vertex(u.x + v.x, u.y + v.y, u.z + v.z); } Vertex operator-(const Vertex& u, const Vertex& v) { - return Vertex(u.x + v.x, u.y + v.y); + return Vertex(u.x + v.x, u.y + v.y, u.z + v.z); } Vertex operator-(const Vertex& v) { - return Vertex(-v.x, -v.y); + return Vertex(-v.x, -v.y, -v.z); } Vertex operator*(const Vertex& v, const int n) { - return Vertex(v.x * n, v.y * n); + return Vertex(v.x * n, v.y * n, v.z * n); } Vertex operator/(const Vertex& v, const int n) { - return Vertex(v.x / n, v.y / n); + return Vertex(v.x / n, v.y / n, v.z / n); } diff --git a/vertex.hh b/vertex.hh @@ -7,11 +7,10 @@ class Vertex { public: int x; int y; - //int z; + int z; public: Vertex(); - Vertex(int x, int y); - Vertex add(int dx, int dy); + Vertex(int x, int y, int z); public: friend std::ostream& operator<<(std::ostream& os, const Vertex& v); friend Vertex operator+(const Vertex& u, const Vertex& v);