//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;

}
Exemple #2
0
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();
	}
}
Exemple #3
0
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;
}