Solução do Exercício 2.3 - ArcTest


Questão 3

Modifique ArcTest para que o usuario possa:
  1. - Clicar no ponto inicial do arco, clicar no ponto final, e o applet desenhe o arco.
  2. - 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).

    1. Simplesmente redefinimos os métodos mouseDown e mouseUp para associarmos o ângulo inicial e final, respectivamente.
    2. Exemplo:


    3. Código fonte

    1. 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.
    2. Exemplo:


    3. Código fonte


[por jftm ]