Ajout d'une fonction permettant de dessiner un objet à huit sommets
addOcto(...) fonctionne de la même manière que addTriangle et addQuad (précédement ajoutée). Dessin d'un pavé à la place de la maison, jardin etc lorsqu'il n'y a pas de split().
This commit is contained in:
parent
7b7575d120
commit
5092f6271d
4
quad.cpp
4
quad.cpp
|
@ -22,7 +22,7 @@ void Quad::offsetNESW(int offsetN, int offsetE, int offsetS, int offsetW) {
|
||||||
this->offset(W,offsetW);
|
this->offset(W,offsetW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Quad::makeParallelogram() {
|
Quad Quad::makeParallelogram() {
|
||||||
int l1, l2;
|
int l1, l2;
|
||||||
|
|
||||||
if(Segment(corner[NW],corner[NE]).length() < Segment(corner[SE],corner[SW]).length()) {
|
if(Segment(corner[NW],corner[NE]).length() < Segment(corner[SE],corner[SW]).length()) {
|
||||||
|
@ -45,6 +45,8 @@ void Quad::makeParallelogram() {
|
||||||
corner[NW] = corner[NE] + (corner[SW] - corner[SE]);
|
corner[NW] = corner[NE] + (corner[SW] - corner[SE]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Quad(corner[0],corner[1],corner[2],corner[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Quad::minLengthNS() {
|
int Quad::minLengthNS() {
|
||||||
|
|
2
quad.hh
2
quad.hh
|
@ -21,7 +21,7 @@ class Quad {
|
||||||
int maxLength();
|
int maxLength();
|
||||||
float minAngle();
|
float minAngle();
|
||||||
float maxAngle();
|
float maxAngle();
|
||||||
void makeParallelogram();
|
Quad makeParallelogram();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ Chose* BatimentQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, V
|
||||||
int rand = this->seed % 20;
|
int rand = this->seed % 20;
|
||||||
|
|
||||||
if(rand <= 2) {
|
if(rand <= 2) {
|
||||||
Quad q = Quad(ne,se,sw,nw);
|
Quad q = Quad(ne,se,sw,nw).makeParallelogram();
|
||||||
addChild(new BatimentQuadPont(lctr+q.corner[0],lctr+q.corner[1],lctr+q.corner[2],lctr+q.corner[3],300));
|
addChild(new BatimentQuadPont(lctr+q.corner[0],lctr+q.corner[1],lctr+q.corner[2],lctr+q.corner[3],300));
|
||||||
}
|
}
|
||||||
else if(rand <= 15) {
|
else if(rand <= 15) {
|
||||||
|
@ -67,7 +67,6 @@ Chose* BatimentQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, V
|
||||||
q.corner[2] = q.corner[2] + Vertex(0,0,th);
|
q.corner[2] = q.corner[2] + Vertex(0,0,th);
|
||||||
q.corner[3] = q.corner[3] + Vertex(0,0,th);
|
q.corner[3] = q.corner[3] + Vertex(0,0,th);
|
||||||
|
|
||||||
q.makeParallelogram();
|
|
||||||
addChild(new BatimentQuadJardin(lctr+q.corner[0],lctr+q.corner[1],lctr+q.corner[2],lctr+q.corner[3]));
|
addChild(new BatimentQuadJardin(lctr+q.corner[0],lctr+q.corner[1],lctr+q.corner[2],lctr+q.corner[3]));
|
||||||
|
|
||||||
q.offset(this->entry,-400);
|
q.offset(this->entry,-400);
|
||||||
|
@ -81,14 +80,20 @@ Chose* BatimentQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, V
|
||||||
void BatimentQuad::triangulation() {
|
void BatimentQuad::triangulation() {
|
||||||
triangles.reserve(12);
|
triangles.reserve(12);
|
||||||
|
|
||||||
|
//addTriangle(new Triangle(lctr+ne,lctr+nw,lctr+sw,0xFF,0xFF,0x00));
|
||||||
|
//addTriangle(new Triangle(lctr+sw,lctr+se,lctr+ne,0xFF,0xFF,0x00));
|
||||||
|
|
||||||
int h = hashInRange(seed,0,minHeight,maxHeight);
|
int h = hashInRange(seed,0,minHeight,maxHeight);
|
||||||
int htoit = hashInRange(seed,0,minHeight/2,maxHeight/2);
|
//int htoit = hashInRange(seed,0,minHeight/2,maxHeight/2);
|
||||||
Vertex neh = ne + Vertex(0,0,h);
|
Vertex neh = ne + Vertex(0,0,h);
|
||||||
Vertex seh = se + Vertex(0,0,h);
|
Vertex seh = se + Vertex(0,0,h);
|
||||||
Vertex nwh = nw + Vertex(0,0,h);
|
Vertex nwh = nw + Vertex(0,0,h);
|
||||||
Vertex swh = sw + Vertex(0,0,h);
|
Vertex swh = sw + Vertex(0,0,h);
|
||||||
Vertex toit = (neh + seh + nwh + swh) / 4 + Vertex(0,0,htoit);
|
//Vertex toit = (neh + seh + nwh + swh) / 4 + Vertex(0,0,htoit);
|
||||||
|
|
||||||
|
addOcto(lctr+ne,lctr+se,lctr+sw,lctr+nw,lctr+neh,lctr+seh,lctr+swh,lctr+nwh,0xFF,0xFF,0x00);
|
||||||
|
|
||||||
|
/*
|
||||||
// 4 Murs
|
// 4 Murs
|
||||||
addTriangle(new Triangle(neh,seh,ne,0xf1,0xe3,0xad)); addTriangle(new Triangle(seh,se,ne,0xf1,0xe3,0xad)); // ne-se-seh-neh
|
addTriangle(new Triangle(neh,seh,ne,0xf1,0xe3,0xad)); addTriangle(new Triangle(seh,se,ne,0xf1,0xe3,0xad)); // ne-se-seh-neh
|
||||||
addTriangle(new Triangle(seh,swh,se,0xf1,0xe3,0xad)); addTriangle(new Triangle(swh,sw,se,0xf1,0xe3,0xad)); // se-sw-swh-seh
|
addTriangle(new Triangle(seh,swh,se,0xf1,0xe3,0xad)); addTriangle(new Triangle(swh,sw,se,0xf1,0xe3,0xad)); // se-sw-swh-seh
|
||||||
|
@ -100,4 +105,5 @@ void BatimentQuad::triangulation() {
|
||||||
addTriangle(new Triangle(seh,toit,swh,0x9a,0x48,0x3c));
|
addTriangle(new Triangle(seh,toit,swh,0x9a,0x48,0x3c));
|
||||||
addTriangle(new Triangle(swh,toit,nwh,0x9a,0x48,0x3c));
|
addTriangle(new Triangle(swh,toit,nwh,0x9a,0x48,0x3c));
|
||||||
addTriangle(new Triangle(nwh,toit,neh,0x9a,0x48,0x3c));
|
addTriangle(new Triangle(nwh,toit,neh,0x9a,0x48,0x3c));
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,16 @@ void Chose::addQuad(Vertex u, Vertex v, Vertex w, Vertex x, char r, char g, char
|
||||||
this->addTriangle(new Triangle(w,v,u,r,g,b));
|
this->addTriangle(new Triangle(w,v,u,r,g,b));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Chose::addOcto(Vertex a, Vertex b, Vertex c, Vertex d,
|
||||||
|
Vertex e, Vertex f, Vertex g, Vertex h, char red, char green, char blue) {
|
||||||
|
this->addQuad(d,c,b,a,red,green,blue);
|
||||||
|
this->addQuad(d,h,g,c,red,green,blue);
|
||||||
|
this->addQuad(c,g,f,b,red,green,blue);
|
||||||
|
this->addQuad(b,f,e,a,red,green,blue);
|
||||||
|
this->addQuad(a,e,h,d,red,green,blue);
|
||||||
|
this->addQuad(h,g,f,e,red,green,blue);
|
||||||
|
}
|
||||||
|
|
||||||
void Chose::display() {
|
void Chose::display() {
|
||||||
if (children.size() > 0) {
|
if (children.size() > 0) {
|
||||||
std::vector<Chose*>::iterator it;
|
std::vector<Chose*>::iterator it;
|
||||||
|
|
|
@ -33,6 +33,7 @@ class Chose {
|
||||||
void addChild(Chose* c);
|
void addChild(Chose* c);
|
||||||
void addTriangle(Triangle* t);
|
void addTriangle(Triangle* t);
|
||||||
void addQuad(Vertex u, Vertex v, Vertex w, Vertex x, char r, char g, char b);
|
void addQuad(Vertex u, Vertex v, Vertex w, Vertex x, char r, char g, char b);
|
||||||
|
void addOcto(Vertex a,Vertex b,Vertex c,Vertex d,Vertex e,Vertex f,Vertex g,Vertex h,char red,char green,char blue);
|
||||||
virtual void triangulation() = 0;
|
virtual void triangulation() = 0;
|
||||||
virtual std::vector<Vertex*> getBoundingBoxPoints() const = 0;
|
virtual std::vector<Vertex*> getBoundingBoxPoints() const = 0;
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
Segment::Segment(Vertex u, Vertex v): u(u), v(v) {}
|
Segment::Segment(Vertex u, Vertex v): u(u), v(v) {}
|
||||||
|
|
||||||
int Segment::length() {
|
float Segment::length() {
|
||||||
return (u-v).norm();
|
return (u-v).norm();
|
||||||
}
|
}
|
||||||
|
|
||||||
Segment Segment::reduce(int value) {
|
Segment Segment::reduce(float value) {
|
||||||
float reduc = (float)length()/(float)value;
|
float reduc = (float)length()/(float)value;
|
||||||
return Segment(u,u+((v - u) / reduc));
|
return Segment(u,u+((v - u) / reduc));
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,10 @@ class Segment {
|
||||||
|
|
||||||
public :
|
public :
|
||||||
Segment(Vertex u, Vertex v);
|
Segment(Vertex u, Vertex v);
|
||||||
int length();
|
float length();
|
||||||
int width();
|
int width();
|
||||||
int height();
|
int height();
|
||||||
Segment reduce(int value);
|
Segment reduce(float value);
|
||||||
Vertex randomPos(int seed, int n, int a, int b); // Renvoir un vertex sur le segment [u,v], à une position entre a% and b%.
|
Vertex randomPos(int seed, int n, int a, int b); // Renvoir un vertex sur le segment [u,v], à une position entre a% and b%.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user