sexta-feira, 23 de julho de 2010

Desenvolvimento em Java

>Por Juliana

Bom dia,
Uma semana depois, a função executaComando() do RoboVirtual mudou bastante. Após muita trigonometria, o resultado foi o código apresentado a seguir. Alguns princípios se mantiveram, outros mudaram completamente. O robô agora se movimenta como deveria. O próximo passo é pensar a respeito da representação do movimento de uma bola na arena, bem como a colisão entre os objetos.
Enfim, aqui está o trecho do código:
void executaComando() {
if (tempoCmd > 0) {
/** usado pois o giro acontece a 90 graus da direcao do robo */
final double noventa = Math.PI / 2;
double dxa;
double dya;
switch (comando) {
case 0x11:
x += dx = velCmTempo * Math.cos(angulo);
y += dy = velCmTempo * Math.sin(angulo);
break;
case 0x99:
x += dx = -velCmTempo * Math.cos(angulo);
y += dy = -velCmTempo * Math.sin(angulo);
break;
case 0x10:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = -velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo / distRodasCm;
x += dx = (dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = (dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x90:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo / distRodasCm;
x += dx = (dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = (dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x09:
/** usado pois o giro acontece a 90 graus da direcao do robo */
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = -velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo / distRodasCm;
x += dx = -(dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = -(dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x01:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo / distRodasCm;
x += dx = -(dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = -(dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x19:
/**
* simplificando perim = Math.PI * distRodasCm; angulo +=
* dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo * 2 / distRodasCm;
break;
case 0x91:
/**
* simplificando double perim = Math.PI * distRodasCm; angulo +=
* dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo * 2 / distRodasCm;
break;
}
tempoCmd--;
}
}

Até semana que vem
Juliana

Nenhum comentário:

Postar um comentário