O código abaixo calcula o desvio padrão das últimas 200 posições X e Y do mouse e também realiza a suavização dos movimentos de mouse através de um pequeno quadrado.
int ITENS = 200;
int[] posicaoX = new int[ITENS];
int[] posicaoY = new int[ITENS];
int interacao;
int varianciaX = 0;
int varianciaY = 0;
float desvioPX = 0;
float desvioPY = 0;
int relogio;
int intervalo = 1000;
int t = 0;
void setup() {
size(400, 400);
relogio = millis();
}
void draw() {
background(0);
posicaoX[interacao % ITENS] = mouseX;
posicaoY[interacao % ITENS] = mouseY;
rect(mediaX(), mediaY(), 10, 10);
interacao++;
if(millis() > relogio + intervalo) {
relogio = millis();
t++;
}
text("Desvio Padrão X: "+desvioPX+"\nDesvio Padrao Y: "+desvioPY, 120, 20);
if(t%10 == 0) {
desvioPX = desvioPadraoX();
desvioPY = desvioPadraoY();
}
}
int mediaX() { //cálculo posição X
int somaX = 0;
for (int contador = 0; contador < ITENS; contador++)
somaX = somaX + posicaoX[contador];
return int(somaX / ITENS);
}
int mediaY() {//cálculo media posição Y
int somaY = 0;
for (int contador = 0; contador < ITENS; contador++)
somaY = somaY + posicaoY[contador];
return int(somaY / ITENS);
}
float desvioPadraoX() {// cálculo desvio padrão X
varianciaX = 0;
for (int i=0;i<ITENS;i++) {
varianciaX += (posicaoX[i] - mediaX()) * (posicaoX[i]- mediaX());
}
return sqrt(varianciaX/ITENS);
}
float desvioPadraoY() {// cálculo desvio padrão Y
varianciaY = 0;
for (int i=0;i<ITENS;i++) {
varianciaY += (posicaoY[i]-mediaY()) * (posicaoY[i]-mediaY());
}
return sqrt(varianciaY/ITENS);
}
Nenhum comentário:
Postar um comentário