2012-04-06 23 views
0

これを右クリックするとこの円が表示されます。私が望むのは、クリックイベントが発生したときに各パイの角度を計算することです。私は円弧角度を計算する

public void mouseClicked(MouseEvent e) 
     { 


       PointerInfo a = MouseInfo.getPointerInfo(); 
       Point d = a.getLocation(); 
       x1 = (int)d.getX(); 
       y1 = (int)d.getY(); 
       int base=x1-CenterX; 
       int prep=CenterY-y1; 
       double tan=prep/base; 
       double angle=Math.atan(tan); 
    } 

を試してみましたが、calculted角度が正しくないものをここに

Color[] c = {Color.BLACK, Color.RED, Color.BLUE, Color.YELLOW, 
        Color.GREEN, Color.CYAN, Color.MAGENTA, Color.PINK}; 
     for(int i=0; i<8; ++i){ 
      g.setColor(c[i]); 
      g.fillArc(x, y, w, h, i*45, 45); 
     } 

。それは何度かゼロの除算を与えます。 ここにメニューを表示する私の右クリックイベントです。

public void mousePressed(MouseEvent e) { 
      if(e.isPopupTrigger()) 
      { 
       CenterX=e.getX(); 
       CenterY=e.getY(); 
       try { 
        Thread.sleep(300L); 
       } catch (InterruptedException ex) { 
        Logger.getLogger(animate.class.getName()).log(Level.SEVERE, null, ex); 
       } 
     p.repaint(); 
      } 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
      if(e.isPopupTrigger()){ 
       s=e.getX(); 
       as=e.getY(); 
       p.mx=e.getX(); 
     p.my=e.getY(); 
+0

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –

+0

['PointerInfo'](http://docs.oracle.com/javase/7/docs/api/java/awt/PointerInfo.html#getLocation())は、画面全体に対してマウスの位置を提供します。成分。 – Jeffrey

答えて

1

base == 0場合は、[はい、ゼロによる除算、すなわちx1 == CenterX場合、発生します。

Math.atan2を使用してください。 x/y座標を角度に変換し、面倒な数学のすべてをあなたのために処理します。

関連する問題