Triangulation correcte des quartiers concaves.

This commit is contained in:
Georges Dupéron 2012-01-13 16:07:37 +01:00
parent c87e38b4bb
commit 8d2ac72873
3 changed files with 15 additions and 3 deletions

View File

@ -0,0 +1,2 @@
#include "all_includes.hh"

View File

@ -34,10 +34,9 @@ bool QuartierQuad::split() {
void QuartierQuad::triangulation() {
if (c.isConcave()) {
// TODO
Quad q = c << c.concaveCorner();
addGPUTriangle(Triangle(q[NE], q[SE], q[SW]), Couleurs::route);
addGPUTriangle(Triangle(q[SW], q[NW], q[NE]), Couleurs::route);
triangulationConcave(Triangle(q[NE], q[SE], q[SW]));
triangulationConcave(Triangle(q[SW], q[NW], q[NE]));
} else {
Quad ci = c.insetNESW(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir).
Quad cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments).
@ -48,6 +47,16 @@ void QuartierQuad::triangulation() {
}
}
void QuartierQuad::triangulationConcave(Triangle t) {
// Même code que QuartierTri::triangulation.
Triangle ci = t.insetLTR(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir).
Triangle cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments).
addGPUTriangle(t, Couleurs::route);
addGPUTriangle(cih, Couleurs::toit);
for (int i = 0; i < 3; i++)
addGPUQuad(Quad(ci[LEFT+i], ci[TOP+i], cih[TOP+i], cih[LEFT+i]), Couleurs::mur);
}
void QuartierQuad::concave() {
Quad q = c << c.concaveCorner();
addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW])));

View File

@ -12,6 +12,7 @@ public:
virtual bool split();
virtual void triangulation();
private:
void triangulationConcave(Triangle t);
void concave();
void angleAngle();
void angleCote();