diff --git a/geometry/quad.cpp b/geometry/quad.cpp index 44cac33..a908bf7 100644 --- a/geometry/quad.cpp +++ b/geometry/quad.cpp @@ -128,3 +128,7 @@ float Quad::surface() const { Triangle sw(c[SE], c[SW], c[NW]); return ne.surface() + sw.surface(); } + +Quad Quad::offsetNormal(float offset) const { + return ((*this) + Triangle(c[NE], c[SE], c[SW]).normal().setNorm(offset)); +} diff --git a/geometry/quad.hh b/geometry/quad.hh index cad1b7b..61aa615 100644 --- a/geometry/quad.hh +++ b/geometry/quad.hh @@ -41,6 +41,7 @@ class Quad { float surface() const; //void cutCornerCorner(Coin from) const; Quad makeParallelogram() const; + Quad offsetNormal(float offset) const; }; diff --git a/geometry/triangle.cpp b/geometry/triangle.cpp index f44aea6..6b7f9e9 100644 --- a/geometry/triangle.cpp +++ b/geometry/triangle.cpp @@ -61,3 +61,12 @@ float Triangle::surface() const { float base = Segment(c[LEFT], c[RIGHT]).length(); return (base * hauteur) / 2.f; } + +Vertex Triangle::normal() const { + return ((c[LEFT] - c[TOP]) * (c[RIGHT] - c[TOP])); +} + +Vertex Triangle::normalizedNormal() const { + Vertex v = normal(); + return v / v.norm(); +} diff --git a/geometry/triangle.hh b/geometry/triangle.hh index 8318f87..7672588 100644 --- a/geometry/triangle.hh +++ b/geometry/triangle.hh @@ -33,7 +33,8 @@ class Triangle { Triangle inset(CoteTriangle side, float offset) const; Triangle insetLTR(float offset) const; Vertex randomPoint(int seed, int n) const; - void display(); + Vertex normal() const; + Vertex normalizedNormal() const; }; #endif diff --git a/gputriangle.cpp b/gputriangle.cpp index fcab260..28ddfbc 100644 --- a/gputriangle.cpp +++ b/gputriangle.cpp @@ -1,19 +1,14 @@ #include "all_includes.hh" GPUTriangle::GPUTriangle(Vertex left, Vertex top, Vertex right, unsigned char _r, unsigned char _g, unsigned char _b) - : c(left, top, right), r(_r), g(_g), b(_b), vnormal(normal(left,top,right)) { + : c(left, top, right), r(_r), g(_g), b(_b), vnormal(c.normalizedNormal()) { } GPUTriangle::GPUTriangle(Triangle _c, unsigned char _r, unsigned char _g, unsigned char _b) - : c(_c), r(_r), g(_g), b(_b), vnormal(normal(c[LEFT], c[TOP], c[RIGHT])) { + : c(_c), r(_r), g(_g), b(_b), vnormal(c.normalizedNormal()) { } -Vertex GPUTriangle::normal(Vertex left, Vertex top, Vertex right) { - Vertex v = (left - top)*(right - top); - return v / v.norm(); -} - -void GPUTriangle::display() { +void GPUTriangle::display() const { View::setColor(r,g,b); glNormal3d(vnormal.x,vnormal.y,vnormal.z); glVertex3d(c[LEFT].x,c[LEFT].y,c[LEFT].z); @@ -21,7 +16,7 @@ void GPUTriangle::display() { glVertex3d(c[RIGHT].x,c[RIGHT].y,c[RIGHT].z); } -void GPUTriangle::displayNormal() { +void GPUTriangle::displayNormal() const { glColor3ub(255,255,0); // Vertex v = (c[0] + c[1] + c[2]) / 3; // glVertex3d(v.x,v.y,v.z); diff --git a/gputriangle.hh b/gputriangle.hh index 36fbdbf..31955c6 100644 --- a/gputriangle.hh +++ b/gputriangle.hh @@ -14,11 +14,8 @@ class GPUTriangle { public : GPUTriangle(Vertex left, Vertex top, Vertex right, unsigned char r, unsigned char g, unsigned char b); GPUTriangle(Triangle c, unsigned char r, unsigned char g, unsigned char b); - void display(); - void displayNormal(); - -private : - Vertex normal(Vertex left, Vertex top, Vertex right); + void display() const; + void displayNormal() const; }; #endif diff --git a/rules/quartier/quartiertri.cpp b/rules/quartier/quartiertri.cpp index 1abe230..f4ee779 100644 --- a/rules/quartier/quartiertri.cpp +++ b/rules/quartier/quartiertri.cpp @@ -25,7 +25,7 @@ Chose* QuartierTri::factory(int seed, int n, Triangle c) { return new QuartierTriTrapeze(c); } } else { - return new TerrainTriHerbe(c); + return new BatimentTri(c); } } diff --git a/rules/route/routequadchaussee.hh b/rules/route/routequadchaussee.hh index 48af0ba..e3113bd 100644 --- a/rules/route/routequadchaussee.hh +++ b/rules/route/routequadchaussee.hh @@ -8,7 +8,7 @@ class RouteQuadChaussee : public Chose { Quad c; public : - RouteQuadChaussee(Quad c); + RouteQuadChaussee(Quad _c); virtual void triangulation(); virtual void getBoundingBoxPoints(); }; diff --git a/rules/route/trottoirquadnormal.hh b/rules/route/trottoirquadnormal.hh index ae1027d..98100b6 100644 --- a/rules/route/trottoirquadnormal.hh +++ b/rules/route/trottoirquadnormal.hh @@ -9,7 +9,7 @@ class TrottoirQuadNormal : public Chose { float height; public : - TrottoirQuadNormal(Quad c, float height); + TrottoirQuadNormal(Quad _c, float _height); virtual void triangulation(); virtual void getBoundingBoxPoints(); }; diff --git a/rules/terrain/terrainquadherbe.hh b/rules/terrain/terrainquadherbe.hh index fd25165..b492be4 100644 --- a/rules/terrain/terrainquadherbe.hh +++ b/rules/terrain/terrainquadherbe.hh @@ -9,7 +9,7 @@ class TerrainQuadHerbe : public Chose { Quad c; public : - TerrainQuadHerbe(Quad c); + TerrainQuadHerbe(Quad _c); virtual void triangulation(); virtual void getBoundingBoxPoints(); }; diff --git a/rules/terrain/terraintriherbe.hh b/rules/terrain/terraintriherbe.hh index 51b9cb4..884972f 100644 --- a/rules/terrain/terraintriherbe.hh +++ b/rules/terrain/terraintriherbe.hh @@ -9,7 +9,7 @@ class TerrainTriHerbe : public Chose { Triangle c; public : - TerrainTriHerbe(Triangle c); + TerrainTriHerbe(Triangle _c); virtual void triangulation(); virtual void getBoundingBoxPoints(); };