commit 4740ce442defb36033546072314448eec2406192
parent 1bca125a1a71ccaa38805fd9b61a87754361a6b6
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Mon, 9 Jan 2012 13:08:52 +0100
Quelques corrections, nettoyage.
Diffstat:
5 files changed, 33 insertions(+), 25 deletions(-)
diff --git a/geometry/quad.cpp b/geometry/quad.cpp
@@ -27,31 +27,32 @@ Quad Quad::insetNESW(float offset) const {
return insetNESW(offset, offset, offset, offset);
}
-Quad Quad::makeParallelogram() {
+Quad Quad::makeParallelogram() const {
int l1, l2;
+ Quad q(c[NE],c[SE],c[SW],c[NW]);
if(length(N) < length(S)) {
if((l1 = length(E)) < (l2 = length(W))) {
- c[SW] = Segment(c[NW],c[SW]).reduce(l1).v;
- c[SE] = c[SW] + (c[NE] - c[NW]);
+ q[SW] = Segment(q[NW],q[SW]).reduce(l1).v;
+ q[SE] = q[SW] + (q[NE] - q[NW]);
}
else if((l1 = length(E)) > (l2 = length(W))) {
- c[SE] = Segment(c[NE],c[SE]).reduce(l2).v;
- c[SW] = c[SE] + (c[NW] - c[NE]);
+ q[SE] = Segment(q[NE],q[SE]).reduce(l2).v;
+ q[SW] = q[SE] + (q[NW] - q[NE]);
}
}
else {
if((l1 = length(E)) < (l2 = length(W))) {
- c[NW] = Segment(c[SW],c[NW]).reduce(l1).v;
- c[NE] = c[NW] + (c[SE] - c[SW]);
+ q[NW] = Segment(q[SW],q[NW]).reduce(l1).v;
+ q[NE] = q[NW] + (q[SE] - q[SW]);
}
else if((l1 = length(E)) > (l2 = length(W))) {
- c[NE] = Segment(c[SE],c[NE]).reduce(l2).v;
- c[NW] = c[NE] + (c[SW] - c[SE]);
+ q[NE] = Segment(q[SE],q[NE]).reduce(l2).v;
+ q[NW] = q[NE] + (q[SW] - q[SE]);
}
}
- return Quad(c[0],c[1],c[2],c[3]);
+ return q;
}
float Quad::length(Cardinal side) const {
diff --git a/geometry/quad.hh b/geometry/quad.hh
@@ -36,8 +36,8 @@ class Quad {
float maxLength() const;
float minAngle() const;
float maxAngle() const;
- void cutCornerCorner(Coin from) const;
- Quad makeParallelogram();
+ //void cutCornerCorner(Coin from) const;
+ Quad makeParallelogram() const;
};
diff --git a/geometry/triangle.cpp b/geometry/triangle.cpp
@@ -1,13 +1,13 @@
Triangle::Triangle() {
}
Triangle::Triangle(Vertex left, Vertex top, Vertex right) {
- c[0] = left;
- c[1] = top;
- c[2] = right;
+ c[LEFT] = left;
+ c[TOP] = top;
+ c[RIGHT] = right;
}
float Triangle::cosAngle() const {
- return (c[0]-c[1]).cosAngle(c[2]-c[1]);
+ return (c[LEFT]-c[TOP]).cosAngle(c[RIGHT]-c[TOP]);
}
float Triangle::angle() const {
@@ -16,17 +16,24 @@ float Triangle::angle() const {
float Triangle::minAngle() const {
float at = angle();
- float a3 = Triangle(c[TOP],c[RIGHT],c[LEFT]).angle();
- float a1 = Angle::Pi - at - a3;
- return std::min(std::min(a1, at), a3);
+ float ar = Triangle(c[TOP],c[RIGHT],c[LEFT]).angle();
+ float al = Angle::Pi - at - ar;
+ return std::min(std::min(al, at), ar);
+}
+
+float Triangle::maxAngle() const {
+ float at = angle();
+ float ar = Triangle(c[TOP],c[RIGHT],c[LEFT]).angle();
+ float al = Angle::Pi - at - ar;
+ return std::max(std::max(al, at), ar);
}
float Triangle::minLength() const {
- return std::min(std::min((c[0] - c[1]).norm(), (c[1] - c[2]).norm()), (c[2] - c[0]).norm());
+ return std::min(std::min((c[LEFT] - c[TOP]).norm(), (c[TOP] - c[RIGHT]).norm()), (c[RIGHT] - c[LEFT]).norm());
}
float Triangle::maxLength() const {
- return std::max(std::max((c[0] - c[1]).norm(), (c[1] - c[2]).norm()), (c[2] - c[0]).norm());
+ return std::max(std::max((c[LEFT] - c[TOP]).norm(), (c[TOP] - c[RIGHT]).norm()), (c[RIGHT] - c[LEFT]).norm());
}
Triangle Triangle::inset(CoteTriangle side, float offset) const {
diff --git a/geometry/triangle.hh b/geometry/triangle.hh
@@ -25,7 +25,8 @@ class Triangle {
friend Triangle operator+(const Triangle& t, const Vertex& v);
float cosAngle() const; // cosinus de l'angle en c[1].
float angle() const; // angle en c[1], en degrés. TODO : le calcul ne donne que des angles entre 0 et 180 !
- float minAngle() const; // angle minimum du triangle (en c[0], c[1] ou c[2]).
+ float minAngle() const; // angle minimum du triangle (en LEFT, TOP ou RIGHT).
+ float maxAngle() const; // angle maximum du triangle (en LEFT, TOP ou RIGHT).
float minLength() const;
float maxLength() const;
Triangle inset(CoteTriangle side, float offset) const;
diff --git a/rules/batiment/batimentquadmaisonpont.cpp b/rules/batiment/batimentquadmaisonpont.cpp
@@ -10,8 +10,7 @@ void BatimentQuadMaisonPont::getBoundingBoxPoints() {
}
bool BatimentQuadMaisonPont::split() {
- Quad q = c;
- q.makeParallelogram();
+ Quad q = c.makeParallelogram();
if(Segment(q[NE],q[NW]).length() < Segment(q[NE],q[SE]).length())
q = q << 1;
float partLength = Segment(q[NE],q[NW]).length() / 3;
@@ -33,7 +32,7 @@ bool BatimentQuadMaisonPont::split() {
void BatimentQuadMaisonPont::triangulation() {
float h = 2.5*height/3.;
- Quad q = Quad(c[NE],c[SE],c[SW],c[NW]).makeParallelogram();
+ Quad q = c.makeParallelogram();
Quad qh = q + Vertex(0,0,h);
addGPUQuad(c,0x80,0x80,0x80);