Solução do Exercício 2.3 - ArcTest
Questão 3
Modifique ArcTest para que o usuario possa:
- - Clicar no ponto inicial do arco, clicar no ponto final, e o applet
desenhe o arco.
- - Clicar no ponto inicial, arrastar o mouse ati o ponto final e o applet
desenhe o arco ao mesmo tempo em que o usuario arrasta o mouse.
Solução
Usamos a função
Math.atan2(double,double) para calcular o ângulo correspondente
a um ponto selecionado dentro do círculo trigonométrico. Essa função
retorna um valor entre -PI e PI, sendo portanto bem mais adequada
do que outras funções como
asin(double),
acos(double) e
atan(double).
/* Retorna o ângulo em graus (entre 0 e 359) *
* correspondente à posição da coordenada *
* (x,y) dentro do círculo trigonométrico */
static int arco(double x, double y) {
double angulo;
/* Math.atan2 retorna um valor entre -PI e PI */
angulo = (Math.atan2(y,x) * 180 / Math.PI + 360) % 360;
return (int) angulo;
}
Também fizemos uma ligeira correção na chamada dos métodos
drawArc
e
fillArc, onde o último parâmetro corresponde na realidade ao
arco (endAngle - startAngle) e não apenas ao ângulo final
(endAngle).
-
- Simplesmente redefinimos os métodos
mouseDown e
mouseUp
para associarmos o ângulo inicial e final, respectivamente.
- Exemplo:
- Código fonte
-
- De maneira idêntica ao item anterior, só que tratamos o
desenho no método mouseDrag,
ao invés de tratar no método mouseUp.
- Exemplo:
- Código fonte
[por jftm ]