www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 6bfc5872effce2e6885267f14aaca394372c8273
parent 9fb650404dd683c7ab29a50ae90bbdf9cd373330
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Thu, 19 Jan 2012 10:33:27 +0100

Merge branch 'master' of https://github.com/jsmaniac/2011-m2s3-city-builder

Diffstat:
Mgeometry/quad.cpp | 13+++++++++++++
Mgeometry/quad.hh | 1+
Mgeometry/segment.cpp | 8++++++++
Mgeometry/segment.hh | 2++
Mgeometry/triangle.cpp | 18++++++++++++++++++
Mgeometry/triangle.hh | 1+
6 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/geometry/quad.cpp b/geometry/quad.cpp @@ -223,6 +223,19 @@ float Quad::surface() const { return ne.surface() + sw.surface(); } +Quad Quad::insetProportionnal(float prop) { + Quad rQuad= *this; + + Vertex bc = Segment(Segment(c[NW],c[NE]).center(),Segment(c[SW],c[SE]).center()).center(); + prop = prop; + + rQuad[NW] = Segment(bc,c[NW]).at(prop); + rQuad[NE] = Segment(bc,c[NE]).at(prop); + rQuad[SE] = Segment(bc,c[SE]).at(prop); + rQuad[SW] = Segment(bc,c[SW]).at(prop); + return rQuad; +} + Quad Quad::offsetNormal(float offset) const { return ((*this) + Triangle(c[NE], c[SE], c[SW]).normal().setNorm(offset)); } diff --git a/geometry/quad.hh b/geometry/quad.hh @@ -48,6 +48,7 @@ class Quad { float surface() const; //void cutCornerCorner(Coin from) const; Quad makeParallelogram() const; + Quad insetProportionnal(float prop); Quad offsetNormal(float offset) const; Vertex normal() const; Vertex normalizedNormal() const; diff --git a/geometry/segment.cpp b/geometry/segment.cpp @@ -11,6 +11,14 @@ Segment Segment::reduce(float value) { return Segment(u,u+((v - u) / reduc)); } +Vertex Segment::at(float proportiannalDist) { + return Segment(u,u+((v-u)*proportiannalDist)).v; +} + +Vertex Segment::center() { + return at(1./2.); +} + float Segment::width() { return std::abs(u.x - v.x); } diff --git a/geometry/segment.hh b/geometry/segment.hh @@ -13,6 +13,8 @@ class Segment { float length(); float width(); float height(); + Vertex center(); + Vertex at(float); Segment reduce(float value); Vertex randomPos(int seed, int n, float a, float b); // Renvoie un vertex sur le segment [u,v], à une position entre a et b. }; diff --git a/geometry/triangle.cpp b/geometry/triangle.cpp @@ -99,3 +99,21 @@ Vertex Triangle::normalizedNormal() const { Triangle Triangle::offsetNormal(float offset) const { return ((*this) + this->normal().setNorm(offset)); } + +Triangle Triangle::insetProportionnal(float prop) { + Triangle rTriangle = *this; + //ibc : isobarycentre. + Vertex ibc = Segment(c[TOP],Segment(c[LEFT],c[RIGHT]).center()).at(2./3.); + prop = prop; + + rTriangle[TOP] = Segment(ibc,c[TOP]).at(prop); + rTriangle[LEFT] = Segment(ibc,c[LEFT]).at(prop); + rTriangle[RIGHT] = Segment(ibc,c[RIGHT]).at(prop); + return rTriangle; +} + + + + + + diff --git a/geometry/triangle.hh b/geometry/triangle.hh @@ -38,6 +38,7 @@ public : Vertex normal() const; Vertex normalizedNormal() const; Triangle offsetNormal(float offset) const; + Triangle insetProportionnal(float prop); }; #endif