Merge branch 'master' of github:jsmaniac/2011-m2s3-city-builder
This commit is contained in:
commit
e5505e08c8
|
@ -157,6 +157,48 @@ Coin Quad::maxAngleCorner() const {
|
|||
else return NW;
|
||||
}
|
||||
|
||||
Coin Quad::concaveCorner() {
|
||||
Vertex nne = Triangle(c[NW], c[NE], c[SE]).normalizedNormal();
|
||||
Vertex nse = Triangle(c[NE], c[SE], c[SW]).normalizedNormal();
|
||||
Vertex nsw = Triangle(c[SE], c[SW], c[NW]).normalizedNormal();
|
||||
Vertex nnw = Triangle(c[SW], c[NW], c[NE]).normalizedNormal();
|
||||
|
||||
float dne1 = (nnw - nne).norm();
|
||||
float dne2 = (nse - nne).norm();
|
||||
float dse1 = (nne - nse).norm();
|
||||
float dse2 = (nsw - nse).norm();
|
||||
float dsw1 = (nse - nsw).norm();
|
||||
float dsw2 = (nnw - nsw).norm();
|
||||
//float dnw1 = (nsw - nnw).norm();
|
||||
//float dnw2 = (nne - nnw).norm();
|
||||
|
||||
if(dne1 >= 1.5 && dne2 >= 1.5)
|
||||
return NE;
|
||||
else if(dse1 >= 1.5 && dse2 >= 1.5)
|
||||
return SE;
|
||||
else if(dsw1 >= 1.5 && dsw2 >= 1.5)
|
||||
return SW;
|
||||
else
|
||||
return NW;
|
||||
}
|
||||
|
||||
bool Quad::isConcave() {
|
||||
Vertex nne = Triangle(c[NW], c[NE], c[SE]).normalizedNormal();
|
||||
Vertex nse = Triangle(c[NE], c[SE], c[SW]).normalizedNormal();
|
||||
Vertex nsw = Triangle(c[SE], c[SW], c[NW]).normalizedNormal();
|
||||
Vertex nnw = Triangle(c[SW], c[NW], c[NE]).normalizedNormal();
|
||||
|
||||
float dne1 = (nnw - nne).norm();
|
||||
float dse1 = (nne - nse).norm();
|
||||
float dsw1 = (nse - nsw).norm();
|
||||
float dnw1 = (nsw - nnw).norm();
|
||||
|
||||
if(dne1 >= 1.5 || dse1 >= 1.5 || dsw1 >= 1.5 || dnw1 >= 1.5)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Quad operator+(const Quad& q, const Vertex& v) {
|
||||
return Quad(q[NE] + v, q[SE] + v, q[SW] + v, q[NW] + v);
|
||||
}
|
||||
|
|
|
@ -37,6 +37,8 @@ class Quad {
|
|||
float maxLength() const;
|
||||
Cardinal minLengthSide() const;
|
||||
Cardinal maxLengthSide() const;
|
||||
Coin concaveCorner();
|
||||
bool isConcave();
|
||||
float angle(Coin corner) const;
|
||||
float minAngle() const;
|
||||
float maxAngle() const;
|
||||
|
|
|
@ -10,7 +10,8 @@ void QuartierQuad_::getBoundingBoxPoints() {
|
|||
|
||||
bool QuartierQuad_::split() {
|
||||
bool small = c.minLength() < 3500;
|
||||
bool isConcave = c.maxAngle() > Angle::d2r(160);
|
||||
bool isConcave = c.isConcave();
|
||||
//bool isConcave = c.maxAngle() > Angle::d2r(160);
|
||||
bool anglesOk = c.minAngle() > Angle::d2r(90-40) && c.maxAngle() < Angle::d2r(90+40);
|
||||
bool tooWideX = c.minLengthEW() * 2 < c.maxLengthNS(); // trop allongé (côté E ou W deux fois plus petit que le côté N ou S).
|
||||
bool tooWideY = c.minLengthNS() * 2 < c.maxLengthEW(); // trop allongé (côté N ou S deux fois plus petit que le côté E ou W).
|
||||
|
@ -39,7 +40,12 @@ void QuartierQuad_::triangulation() {
|
|||
}
|
||||
|
||||
void QuartierQuad_::concave() {
|
||||
// TODO
|
||||
// TODO À vérifier.
|
||||
Triangle t1(c[c.concaveCorner()], c[c.concaveCorner()+1], c[c.concaveCorner()+2]);
|
||||
Triangle t2(c[c.concaveCorner()+2], c[c.concaveCorner()+3], c[c.concaveCorner()]);
|
||||
|
||||
addChild(new QuartierTri_(t1));
|
||||
addChild(new QuartierTri_(t2));
|
||||
}
|
||||
|
||||
void QuartierQuad_::angleCote() {
|
||||
|
|
Loading…
Reference in New Issue
Block a user