Пример #1
0
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);
	}
}
Пример #2
0
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();
}
Пример #3
0
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();
}
Пример #4
0
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;
}