0

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

 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);
  }

しかし、計算された角度は正しくありません。ゼロ除算の例外が発生することがあります。これが私の右クリックイベントで、メニューが表示されます。

  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();
4

1 に答える 1

1

はい、ゼロによる除算は、の場合base == 0、つまり。の場合に発生しますx1 == CenterX

Math.atan2を使用します。x / y座標を角度に変換し、面倒な計算をすべて処理します。

于 2012-04-06T16:16:26.357 に答える