dVector ortogonalizacao(const dVector u, const dVector v) { double escalar = produtoEscalar(u, v) / produtoEscalar(v, v); dVector vetor(u.size()); for(int i = 0;i< u.size();i++)vetor[i]=u[i] - escalar*v[i]; return vetor; }
vector<float> Calc::pontoIntersecao(vector<float> raioProjecao, Face face){ float t; vector<float> normal = face.getNormal(); t = produtoEscalar(normal, face.getVertice1().getPos()); t = t/produtoEscalar(normal, raioProjecao); for(int i = 0; i < 4; i++) raioProjecao[i] = raioProjecao[i]*t; return raioProjecao; }
vector <Vetor> ortogonalizar (Vetor v, Vetor u) { vector <Vetor> ortogonais; double temp = (produtoEscalar(v,u)/produtoEscalar(v,v)); u.x = u.x - (temp)*v.x; u.y = u.y - (temp)*v.y; u.z = u.z - (temp)*v.z; ortogonais.push_back(v); ortogonais.push_back(u); return ortogonais; }
bool Calc::interceptaFace(vector<float> pontoInter, Face face){ vector<float> aresta1, aresta2, aresta3; vector<float> normal1, normal2, normal3; aresta1 = face.getVertice1().getPos(); aresta2 = face.getVertice2().getPos(); aresta3 = face.getVertice3().getPos(); normal1 = produtoVetorial(aresta2, aresta1); normal2 = produtoVetorial(aresta3, aresta2); normal3 = produtoVetorial(aresta1, aresta3); if((produtoEscalar(pontoInter, normal1) < 0) || (produtoEscalar(pontoInter, normal2) < 0) || (produtoEscalar(pontoInter, normal3) < 0)) return false; return true; }
vector<float> Calc::coordMundoParaCam(Camera camera, Vertice vertice){ vector < vector<float> > mat; mat.resize(4); for(int i = 0; i < 4; i++) mat[i].resize(4); for(int i = 0; i < 4; i++){ switch(i){ case(0): mat[i][0] = camera.getI()[0]; mat[i][1] = camera.getI()[1]; mat[i][2] = camera.getI()[2]; mat[i][3] = (-1)*produtoEscalar(camera.getI(), camera.getPos()); break; case(1): mat[i][0] = camera.getJ()[0]; mat[i][1] = camera.getJ()[1]; mat[i][2] = camera.getJ()[2]; mat[i][3] = (-1)*produtoEscalar(camera.getJ(), camera.getPos()); break; case(2): mat[i][0] = camera.getK()[0]; mat[i][1] = camera.getK()[1]; mat[i][2] = camera.getK()[2]; mat[i][3] = (-1)*produtoEscalar(camera.getK(), camera.getPos()); break; default: mat[i][0] = 0; mat[i][1] = 0; mat[i][2] = 0; mat[i][3] = 1; break; } } return produtoMatrizVetor(mat, vertice.getPos()); }