Tablero::Tablero(int largo, int alto, int ancho) { _largo = largo; _alto = alto; _ancho = ancho; _numCubos = _largo * _alto * _ancho; for (int i = 0; i < _numCubos; i++) { this->addObjeto(new Cubo()); hijos[i]->color->setColor(0.2, 0.2, 0.2); } //comienza pintando al principio de la carretara PV3D* p = new PV3D(_largo / 2, 0, 1, 1); int numCubo = 0; for (int x = 0; x < _largo; x++) { for (int y = 0; y < _alto; y++) { for (int z = 0; z < _ancho; z++) { hijos[numCubo]->mt->traslada(p); p->setZ(p->getZ()+1); numCubo++; } p->setZ(p->getZ()-_ancho); if(_alto > 1) p->setY(p->getY()+1); } if(_alto > 1) p->setY(p->getY()-_alto); p->setX(p->getX()-1); } }
PV3D* Malla::calculoVectorNormalPorNewell(Cara C){ PV3D* n = new PV3D(0, 0, 0, 0); for (int i = 0; i < C.getNumeroVertices(); i++){ PV3D* vertActual = vertice[C.getIndiceVertice(i)]; PV3D* vertSiguiente = vertice[C.getIndiceVertice((i + 1) % C.getNumeroVertices())]; n->setX(n->getX() + ((vertActual->getY() - vertSiguiente->getY())*(vertActual->getZ() + vertSiguiente->getZ()))); n->setY(n->getY() + ((vertActual->getZ() - vertSiguiente->getZ())*(vertActual->getX() + vertSiguiente->getX()))); // Z * X n->setZ(n->getZ() + ((vertActual->getX() - vertSiguiente->getX())*(vertActual->getY() + vertSiguiente->getY()))); // X * Y } return n->normaliza(); }
PV3D* Malla::vectorNormalNewell(Cara* c){ PV3D* n = new PV3D(); for(int i=0; i<c->getNumVertices(); i++){ PV3D* vertActual = vertice[c->getIndiceVerticeK(i)]; PV3D* vertSig = vertice[c->getIndiceVerticeK((i+1) % c->getNumVertices())]; n->setX(n->getX() + ((vertActual->getY() - vertSig->getY()) * (vertActual->getZ() + vertSig->getZ()))); n->setY(n->getY() + ((vertActual->getZ() - vertSig->getZ()) * (vertActual->getX() + vertSig->getX()))); n->setZ(n->getZ() + ((vertActual->getX() - vertSig->getX()) * (vertActual->getY() + vertSig->getY()))); } return n->normaliza(); }
PV3D* PV3D::normaliza(){ // Same direction but module = 1 PV3D* newV = new PV3D(); GLdouble moduleVector = module(this); newV->setX((1 / moduleVector) * this->getX()); newV->setY((1 / moduleVector) * this->getY()); newV->setZ((1 / moduleVector) * this->getZ()); newV->setPV(0); //vector return newV; }