Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //A---------------B//
- //| |//
- //C---------------C//
- //Classe auxiliar de valores para correcao (transformacao linear) do retangulo
- public class Correcao{
- public float max;
- public float min;
- public float fator_erro_x;
- public float fator_erro_y;
- }
- //Classe auxiliar ponto, com coordenadas X, Y e Z (se um dia for trabalhar com 3D)
- public class Ponto {
- public float x;
- public float y;
- public float z; //Um dia se for trabalhar 3D
- }
- void calibraMesa(TuioCursor tcur){
- //Instancia 4 pontos (4 cantos da mesa)
- Ponto a = new Ponto();
- Ponto b = new Ponto();
- Ponto c = new Ponto();
- Ponto d = new Ponto();
- //Instancia uma classe Correcao com as variaveis para calculo de ajuste
- Correcao correct = new Correcao();
- println("Rotina de calibracao \n Toque no ponto A");
- //Grava ponto A - Inicio
- a.x = tcur.getX();
- a.y = tcur.getY();
- println("rotina de calibracao \n Toque no ponto B");
- //Grava ponto B
- b.x = tcur.getX();
- b.y = tcur.getY();
- println("rotina de calibracao \n Toque no ponto C");
- //Grava ponto C
- c.x = tcur.getX();
- c.y = tcur.getY();
- println("rotina de calibracao \n Toque no ponto D");
- //Grava ponto D
- d.x = tcur.getX();
- d.y = tcur.getY();
- //Calcula o fator de erro em X
- float delta_x_um = abs(a.x - c.x); // Pega o modulo da diferenca na linha de cima em X
- float delta_x_dois = abs(b.x - d.x); // Pega o modulo da diferenca na linha de baixo em X
- correct.fator_erro_x = max(delta_x_um, delta_x_dois); // Coloca o fator como o maior obtido na "linha"
- //Calcula o fator de erro em Y
- float delta_y_um = abs(a.y - b.y); // Pega o modulo da diferenca na linha de cima em X
- float delta_y_dois = abs(c.y - d.y); // Pega o modulo da diferenca na linha de baixo em X
- correct.fator_erro_y = max(delta_y_um, delta_y_dois); // Coloca o fator como o maior obtido na "coluna"
- //Aplica transformacao linear (colocar ponto A na origem, e rotacionar todos pontos)
- //Rotaciona ponto D
- d.x = abs(d.x - a.x);
- d.y = abs(d.y - a.y);
- //Rotaciona ponto C
- d.x = abs(d.x - a.x);
- d.y = abs(d.y - a.y);
- //Rotaciona ponto B
- d.x = abs(d.x - a.x);
- d.y = abs(d.y - a.y);
- //Rotaciona ponto A
- d.x = abs(d.x - a.x);
- d.y = abs(d.y - a.y);
- //Agora temos a mesa com as seguintes coordenadas
- // (0,0)-------------------(Cx-Ax, 0)//
- // | |//
- //(0,Cy-Ay)-------------------(Dx-Ax, Dy-Ay)//
- //Ja que nosso origem esta em zero
- //Podemos aplicar uma regra de 3 com a proporcao da tela
- //Dx = maior X, equivalente a 1024
- //Dy = maior Y, equivalente a 768
- //Assim, corrigimos todos os outros pontos com a regra de 3, com excessao do A
- //jah que ele eh zero (origem), vai ser zero de qualquer maneira
- }
- void addTuioCursor(TuioCursor tcur) {
- println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
- if (tcur.getCursorID() == 0) {
- println("ELEMENTO ADICIONADO");
- fill(255);
- //rect(tcur.getX(), tcur.getY(), 50, 50);
- sound1.play();
- rect(width/2, height/2, 50, 50);
- image(Efeitosom, tcur.getY(), tcur.getX());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement