Ajout de QuartierTriTrapeze.
This commit is contained in:
parent
0608b196ff
commit
b9ef26c648
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@ CXX=g++
|
|||
CCWARN=-Wall -Wextra -Werror
|
||||
# TODO : -O3 -m32 ou -m64
|
||||
# -g -rdynamic uniquement pour le debug.
|
||||
CFLAGS=-O0 -I. $(CCWARN) -g -rdynamic
|
||||
CFLAGS=-O0 -g -rdynamic -m32 -I. $(CCWARN)
|
||||
|
||||
SOURCES = $(shell echo *.cpp geometry/*.cpp rules/*.cpp rules/*/*.cpp)
|
||||
HEADERS = $(shell echo *.hh geometry/*.hh rules/*.hh rules/*/*.hh)
|
||||
|
|
|
@ -53,6 +53,7 @@ class Chose;
|
|||
#include "rules/quartier/quartierquadrect.hh"
|
||||
#include "rules/quartier/quartiertri.hh"
|
||||
#include "rules/quartier/quartiertrihauteur.hh"
|
||||
#include "rules/quartier/quartiertritrapeze.hh"
|
||||
|
||||
#include "rules/route/routequadcarrefour.hh"
|
||||
#include "rules/route/routequadchaussee.hh"
|
||||
|
|
|
@ -102,8 +102,12 @@ Quad operator+(const Quad& q, const Vertex& v) {
|
|||
return Quad(q[NE] + v, q[SE] + v, q[SW] + v, q[NW] + v);
|
||||
}
|
||||
|
||||
void Quad::cutCornerCorner(Coin from) const {
|
||||
Triangle t1(c[from-1], c[from], c[from+1]);
|
||||
Triangle t2(c[from+1], c[from+2], c[from-1]);
|
||||
// TODO
|
||||
/*
|
||||
void Quad::cutCornerCorner(Coin from, float cutwidth) const {
|
||||
Triangle left = Triangle(c[from-2], c[from-1], c[from]).offset(BASE, cutwidth);
|
||||
Triangle right = Triangle(c[from], c[from+1], c[from+2]).offset(BASE, cutwidth);
|
||||
Quad cut(right[LEFT], right[RIGHT], left[LEFT], left[RIGHT]); // + c[from+2] avant le 1er sommet, et c[from] après le 2e.
|
||||
Triangle cutFrom(left[RIGHT], c[from], right[LEFT]);
|
||||
Triangle cutTo(right[LEFT], c[from+2], left[RIGHT]);
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
Chose::Chose() : seed(initialSeed), children() {
|
||||
}
|
||||
|
||||
// TODO : Est-ce vraiment nécessaire ?
|
||||
// TODO : Le destructeur est-il vraiment nécessaire ?
|
||||
// TODO : Vu que children et triangles contiennent des pointeurs, le .clear() risque de ne pas les désallouer !
|
||||
Chose::~Chose() {
|
||||
children.clear();
|
||||
triangles.clear();
|
||||
|
|
|
@ -11,9 +11,6 @@ class QuartierQuadAngle : public QuartierQuad {
|
|||
public :
|
||||
QuartierQuadAngle(Quad c);
|
||||
virtual bool split();
|
||||
|
||||
private :
|
||||
void cutAngle();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -10,14 +10,14 @@ void QuartierTri::getBoundingBoxPoints() {
|
|||
}
|
||||
|
||||
Chose* QuartierTri::factory(int seed, int n, Triangle c) {
|
||||
(void)seed;
|
||||
(void)n;
|
||||
bool small = c.minLength() < 2500;
|
||||
bool big = c.maxLength() >= 5000;
|
||||
if (small && !big) {
|
||||
return new BatimentTri(c);
|
||||
} else if (!small) {
|
||||
} else if (!small && proba(seed, n, 1, 2)) {
|
||||
return new QuartierTriHauteur(c);
|
||||
} else if (!small) {
|
||||
return new QuartierTriTrapeze(c);
|
||||
} else {
|
||||
return new TerrainTriHerbe(c);
|
||||
}
|
||||
|
|
|
@ -4,14 +4,22 @@ QuartierTriHauteur::QuartierTriHauteur(Triangle c) : QuartierTri(c) {
|
|||
}
|
||||
|
||||
bool QuartierTriHauteur::split() {
|
||||
// TODO : sélectionner le sommet avec l'angle le plus grand.
|
||||
// Triangle::cutCornerSideResult r = c.cutCornerSide(TOP, random(seed,0,0.33, 0.67);
|
||||
// addChild(new RouteQuadChaussee(r.cut));
|
||||
// addChild(new RouteTriChaussee(r.cutFrom));
|
||||
// addChild(QuartierTri::factory(seed, 1, r.left);
|
||||
// addChild(QuartierTri::factory(seed, 1, r.right);
|
||||
Vertex baseCenter = Segment(c[LEFT], c[RIGHT]).randomPos(seed, 0, 33, 67);
|
||||
|
||||
Triangle tl = Triangle(baseCenter, c[LEFT], c[TOP]).inset(BASE, hrw);
|
||||
Triangle tr = Triangle(c[TOP], c[RIGHT], baseCenter).inset(BASE, hrw);
|
||||
Triangle tl(c[TOP], baseCenter, c[LEFT]);
|
||||
Triangle tr(c[RIGHT], baseCenter, c[TOP]);
|
||||
tl = tl.inset(LEFTSIDE, hrw);
|
||||
tr = tr.inset(RIGHTSIDE, hrw);
|
||||
|
||||
addChild(new RouteQuadChaussee(Quad(tr[LEFT], tr[RIGHT], tl[LEFT], tl[RIGHT])));
|
||||
addChild(new RouteTriChaussee(Triangle(tl[RIGHT], c[TOP], tr[LEFT])));
|
||||
addChild(QuartierTri::factory(seed, 1, tl >> 1));
|
||||
addChild(QuartierTri::factory(seed, 2, tr << 1));
|
||||
addChild(new RouteQuadChaussee(Quad(tr[RIGHT], tr[TOP], tl[TOP], tl[LEFT])));
|
||||
addChild(new RouteTriChaussee(Triangle(tl[LEFT], c[TOP], tr[RIGHT])));
|
||||
addChild(QuartierTri::factory(seed, 1, tl));
|
||||
addChild(QuartierTri::factory(seed, 2, tr));
|
||||
return true;
|
||||
}
|
||||
|
|
20
rules/quartier/quartiertritrapeze.cpp
Normal file
20
rules/quartier/quartiertritrapeze.cpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
#include "all_includes.hh"
|
||||
|
||||
QuartierTriTrapeze::QuartierTriTrapeze(Triangle c) : QuartierTri(c) {
|
||||
}
|
||||
|
||||
bool QuartierTriTrapeze::split() {
|
||||
// TODO : sélectionner le sommet avec l'angle le plus petit.
|
||||
Vertex left = Segment(c[LEFT], c[TOP]).randomPos(seed, 0, 33, 67);
|
||||
Vertex right = Segment(c[RIGHT], c[TOP]).randomPos(seed, 0, 33, 67);
|
||||
|
||||
Triangle ttop(left, c[TOP], right);
|
||||
Quad trapeze(right, c[RIGHT], c[LEFT], left);
|
||||
ttop = ttop.inset(BASE, hrw);
|
||||
trapeze = trapeze.inset(N, hrw);
|
||||
|
||||
addChild(new RouteQuadChaussee(Quad(ttop[RIGHT], trapeze[NE], trapeze[NW], ttop[LEFT])));
|
||||
addChild(QuartierTri::factory(seed, 1, ttop));
|
||||
addChild(QuartierQuad::factory(seed, 2, trapeze));
|
||||
return true;
|
||||
}
|
15
rules/quartier/quartiertritrapeze.hh
Normal file
15
rules/quartier/quartiertritrapeze.hh
Normal file
|
@ -0,0 +1,15 @@
|
|||
#ifndef _RULES_QUARTIER_QUARTIERTRITRAPEZE_HH_
|
||||
#define _RULES_QUARTIER_QUARTIERTRITRAPEZE_HH_
|
||||
|
||||
#include "all_includes.hh"
|
||||
|
||||
class QuartierTriTrapeze : public QuartierTri {
|
||||
private :
|
||||
static const int hrw = 250; // half road width : 2,50m.
|
||||
|
||||
public :
|
||||
QuartierTriTrapeze(Triangle c);
|
||||
virtual bool split();
|
||||
};
|
||||
|
||||
#endif
|
3
view.cpp
3
view.cpp
|
@ -1,9 +1,8 @@
|
|||
#include "all_includes.hh"
|
||||
|
||||
// camera(Camera(Vertex(9600,10000,15300),0,179,1000,0.6)
|
||||
View::View(Chose* root)
|
||||
: root(root),
|
||||
camera(Camera(Vertex(-9000,-15000,3000),45,90,1000,0.6)),
|
||||
camera(Camera(Vertex(9600,10000,15300),0,179,1000,0.6)),
|
||||
lod(camera.cameraCenter, root) {
|
||||
initWindow();
|
||||
mainLoop();
|
||||
|
|
Loading…
Reference in New Issue
Block a user