//Balancea a arvore. NoRN* Balanceamento(NoRN* filho){ NoRN* tio; NoRN* avo; if(filho->pai){ if(Cor(filho->pai) == VERMELHO && Cor(filho) == VERMELHO){ avo = filho->pai->pai; if(avo != NULL){ tio = EncontraIrmao(filho->pai); if(Cor(tio)){ Rotaciona(filho, filho->pai, avo); TrocaCores(avo); TrocaCores(avo->pai); return Balanceamento(avo->pai); }else{ TrocaCores(tio); TrocaCores(filho->pai); TrocaCores(avo); return Balanceamento(avo); } }else{ return filho->pai; } }else{ return Balanceamento(filho->pai); } } return filho; }
void Jogo::executar() { while(!gTeclado.soltou[TECLA_ESC] && !gEventos.sair) { uniIniciarFrame(); // Se pressionou R, restaura o painel de debug if (gTeclado.pressionou[TECLA_R]) gDebug.restaurar(); // Depurar variaveis gDebug.depurar("FPS", (int)gTempo.getFPS()); gDebug.depurar("deltaTempo", gTempo.getDeltaTempo()); gDebug.depurar("mouse", Vetor2D(gMouse.x, gMouse.y)); gDebug.depurar("retanguloTela", Quad(0, 0, gJanela.getLargura(), gJanela.getAltura())); // Cria um erro gDebug.erro("Erro Teste", this); // Opcionalmente, passa-se uma cor para a depuração gDebug.depurar("Verde", "Este é um texto Verde", Cor(0, 255, 0)); // Desenhar fundo, para poder ver melhor a transparência do painel sprFundo.desenhar(gJanela.getLargura() / 2, gJanela.getAltura() / 2); desenharInstrucoes(); uniTerminarFrame(); } }
Render::Render (Scene s) { int i,j; Video v; Reta r; Vetor du,dv; Vetor ini,pos; PointsShaded=0; RaysShooted=0; du=s.Proj.u*(Float (s.Wx)/Float (s.Rx)); dv=s.Proj.v*(Float (s.Wy)/Float (s.Ry)); ini=s.Proj.o+dv*s.y1; v.WaitForKey (); v.Init (); for (j=s.y1; j<=s.y2; j++) { pos=ini+du*s.x1; for (i=s.x1; i<=s.x2; i++) { r.TwoPoints (s.Obs,pos); r.Normalize (); v.Point (i,j,v.Inclui (Cor (ShootRay (r,s,0)))); PointsShaded++; pos+=du; if (v.KeyPressed ()) { v.Close (); return; } } ini+=dv; } v.WaitForKey (); v.Close (); }
Cor Visao::gravaCor(){ Cor cor = Cor(); while (true){ clock_t start=tempo(); cam >> imagem; cvtColor(imagem, imagemHSV, COLOR_BGR2HSV); imshow("Imagem Normal", imagem); moveWindow("Imagem Normal", 0, 0); inRange(imagemHSV, Scalar(pontos[0]-variacaoH, pontos[1]*(1-variacao), pontos[2]*(1-variacao)), Scalar(pontos[0]+variacaoH, pontos[1]*(1+variacao), pontos[2]*(1+variacao)), imagemTratada); //medianBlur(imagemTratada, imagemTratada, 3); imshow("Calibragem", imagemTratada); moveWindow("Calibragem", 640, 0); setMouseCallback("Imagem Normal", corPixel, 0); char key = waitKey(1); if (key == 27){ for (int i=0; i<10; i++){ destroyAllWindows(); waitKey(1); } break; } if (clique == true){ cor.corH = pontos[0]; cor.corS = pontos[1]; cor.corV = pontos[2]; if (key == 32){ for (int i=0; i<10; i++){ destroyAllWindows(); waitKey(1); } cout << "Cor Calibrada" << endl; clique = false; pontos[0] = 0; pontos[1] = 0; pontos[2] = 0; break; } } } return cor; }
int RemontaArvoreRN(ArvoreRN *arvore, NoRN *no) { NoRN *irmao; while(no != arvore->raiz || Cor(no)) { irmao = EncontraIrmao(no); if(irmao->cor == VERMELHO) { Caso1Remocao(no, &irmao); } if(DuploPreto(*irmao)) { Caso2Remocao(&no, irmao); } else { Caso3Remocao(no, &irmao); Caso4Remocao(arvore->raiz, &no, irmao); } } no->cor = PRETO; }