50 lines
1.9 KiB
C++
50 lines
1.9 KiB
C++
#include "all_includes.hh"
|
|
|
|
Quadrilatere::Quadrilatere(Vertex ne, Vertex se, Vertex sw, Vertex nw) : Chose() {
|
|
addEntropy(ne, se, sw, nw);
|
|
corner[NE] = ne;
|
|
corner[SE] = se;
|
|
corner[SW] = sw;
|
|
corner[NW] = nw;
|
|
}
|
|
|
|
Chose* Quadrilatere::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw) {
|
|
Quad q = Quad(ne,se,sw,nw);
|
|
int minLength = q.minLength();
|
|
int maxLength = q.maxLength();
|
|
float minAngle = q.minAngle();
|
|
float maxAngle = q.maxAngle();
|
|
if (minLength < 2500 && maxLength > 5000 && proba(seed, n, 1, 20)) {
|
|
return new QuadHerbe(ne, se, sw, nw);
|
|
} else if (minLength < 2500 && minAngle > 50/180.f*3.1415926535 && maxAngle < 130/180.f*3.1415926535) { // + contrainte sur les angles
|
|
return new Batiment(ne, se, sw, nw);
|
|
} else if (minAngle <= 50/180.f*3.1415926535 && maxAngle >= 130/180.f*3.1415926535) {
|
|
// angles trop pointus
|
|
return new QuadHerbe(0xff, ne, se, sw, nw);
|
|
} else if (minLength > 2500 &&
|
|
2*std::min(Segment(nw,ne).length(), Segment(se,sw).length())
|
|
< std::max(Segment(ne,se).length(), Segment(sw,nw).length())) {
|
|
// trop allongé (côté N ou S deux fois plus petit que le côté E ou W).
|
|
return new QuadRect(nw, ne, se, sw); // TODO
|
|
} else if (minLength > 2500 &&
|
|
2*std::min(Segment(ne,se).length(), Segment(sw,nw).length())
|
|
< std::max(Segment(nw,ne).length(), Segment(se,sw).length())) {
|
|
// trop allongé (côté E ou W deux fois plus petit que le côté N ou S).
|
|
return new QuadRect(ne, se, sw, nw); // TODO
|
|
} else if (minLength > 2500) {
|
|
return new QuadCroix(ne, se, sw, nw);
|
|
} else {
|
|
return new QuadHerbe(ne, se, sw, nw);
|
|
}
|
|
}
|
|
|
|
bool Quadrilatere::subdivide() {
|
|
return false;
|
|
}
|
|
|
|
void Quadrilatere::triangulation() {
|
|
triangles.reserve(2);
|
|
addTriangle(new Triangle(corner[NE], corner[NW], corner[SW], 0xc0, 0xc0, 0xc0));
|
|
addTriangle(new Triangle(corner[SW], corner[SE], corner[NE], 0xc0, 0xc0, 0xc0));
|
|
}
|