2012-04-06 196 views
0

当我右键单击Jframe时,出现此饼图。我想要的是当点击事件发生时计算每个饼图的角度。在Java中计算圆弧角度

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 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角度是不正确的。它有时会给我除以零例外。 这里是我的右键单击事件显示菜单。

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/)。 – 2012-04-06 16:01:10

+0

['PointerInfo'](http://docs.oracle.com/javase/7/docs/api/java/awt/PointerInfo.html#getLocation())提供鼠标相对于整个屏幕的位置,而不是零件。 – Jeffrey 2012-04-06 16:02:36

回答

1

是,由零鸿沟会发生,如果base == 0,也就是说,如果x1 == CenterX。使用Math.atan2。它将x/y坐标转换为角度,并为您处理所有杂乱的数学问题。