Advertisement
Guest User

Calibração de Coordenadas - PI 6º Semestre DD

a guest
Nov 25th, 2014
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. //A---------------B//
  2. //| |//
  3. //C---------------C//
  4.  
  5. //Classe auxiliar de valores para correcao (transformacao linear) do retangulo
  6. public class Correcao{
  7. public float max;
  8. public float min;
  9. public float fator_erro_x;
  10. public float fator_erro_y;
  11. }
  12.  
  13. //Classe auxiliar ponto, com coordenadas X, Y e Z (se um dia for trabalhar com 3D)
  14. public class Ponto {
  15. public float x;
  16. public float y;
  17. public float z; //Um dia se for trabalhar 3D
  18. }
  19.  
  20.  
  21. void calibraMesa(TuioCursor tcur){
  22. //Instancia 4 pontos (4 cantos da mesa)
  23. Ponto a = new Ponto();
  24. Ponto b = new Ponto();
  25. Ponto c = new Ponto();
  26. Ponto d = new Ponto();
  27.  
  28. //Instancia uma classe Correcao com as variaveis para calculo de ajuste
  29. Correcao correct = new Correcao();
  30.  
  31. println("Rotina de calibracao \n Toque no ponto A");
  32. //Grava ponto A - Inicio
  33. a.x = tcur.getX();
  34. a.y = tcur.getY();
  35.  
  36. println("rotina de calibracao \n Toque no ponto B");
  37. //Grava ponto B
  38. b.x = tcur.getX();
  39. b.y = tcur.getY();
  40.  
  41. println("rotina de calibracao \n Toque no ponto C");
  42. //Grava ponto C
  43. c.x = tcur.getX();
  44. c.y = tcur.getY();
  45.  
  46. println("rotina de calibracao \n Toque no ponto D");
  47. //Grava ponto D
  48. d.x = tcur.getX();
  49. d.y = tcur.getY();
  50.  
  51. //Calcula o fator de erro em X
  52. float delta_x_um = abs(a.x - c.x); // Pega o modulo da diferenca na linha de cima em X
  53. float delta_x_dois = abs(b.x - d.x); // Pega o modulo da diferenca na linha de baixo em X
  54. correct.fator_erro_x = max(delta_x_um, delta_x_dois); // Coloca o fator como o maior obtido na "linha"
  55.  
  56.  
  57. //Calcula o fator de erro em Y
  58. float delta_y_um = abs(a.y - b.y); // Pega o modulo da diferenca na linha de cima em X
  59. float delta_y_dois = abs(c.y - d.y); // Pega o modulo da diferenca na linha de baixo em X
  60. correct.fator_erro_y = max(delta_y_um, delta_y_dois); // Coloca o fator como o maior obtido na "coluna"
  61.  
  62.  
  63. //Aplica transformacao linear (colocar ponto A na origem, e rotacionar todos pontos)
  64. //Rotaciona ponto D
  65. d.x = abs(d.x - a.x);
  66. d.y = abs(d.y - a.y);
  67.  
  68. //Rotaciona ponto C
  69. d.x = abs(d.x - a.x);
  70. d.y = abs(d.y - a.y);
  71.  
  72. //Rotaciona ponto B
  73. d.x = abs(d.x - a.x);
  74. d.y = abs(d.y - a.y);
  75.  
  76. //Rotaciona ponto A
  77. d.x = abs(d.x - a.x);
  78. d.y = abs(d.y - a.y);
  79.  
  80. //Agora temos a mesa com as seguintes coordenadas
  81.  
  82. // (0,0)-------------------(Cx-Ax, 0)//
  83. // | |//
  84. //(0,Cy-Ay)-------------------(Dx-Ax, Dy-Ay)//
  85.  
  86. //Ja que nosso origem esta em zero
  87. //Podemos aplicar uma regra de 3 com a proporcao da tela
  88.  
  89. //Dx = maior X, equivalente a 1024
  90. //Dy = maior Y, equivalente a 768
  91.  
  92. //Assim, corrigimos todos os outros pontos com a regra de 3, com excessao do A
  93. //jah que ele eh zero (origem), vai ser zero de qualquer maneira
  94.  
  95.  
  96.  
  97. }
  98.  
  99.  
  100.  
  101.  
  102.  
  103. void addTuioCursor(TuioCursor tcur) {
  104. println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
  105. if (tcur.getCursorID() == 0) {
  106. println("ELEMENTO ADICIONADO");
  107. fill(255);
  108. //rect(tcur.getX(), tcur.getY(), 50, 50);
  109. sound1.play();
  110. rect(width/2, height/2, 50, 50);
  111. image(Efeitosom, tcur.getY(), tcur.getX());
  112. }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement