如何计算5点多边形中的点

时间:2014-11-04 11:53:19

标签: java swing

我有一个带有按钮的类Demo,当用户单击名为polygon的按钮时,从它们点击的点开始绘制多边形,代码在绘图中工作正常但不幸的是它在错误的位置绘制多边形。 / p>

PolygonShape类

class PolygonShape {

   int x, y;
   private Polygon p;

   public PolygonShape(int x, int y) {
    // the x, y sent to this constructor
    //are the cordinates of the point where the user clicked
    this.x = x;
    this.y = y;       
   }

   public void draw(Graphics g) {       
    p = new Polygon();
    for (int i = 0; i < 5; i++)
      p.addPoint((int) (x + y * Math.cos(i * 2 * Math.PI / 5)),
          (int) (x + y * Math.sin(i * 2 * Math.PI / 5)));
    g.drawPolygon(p);       
   }
}  

2 个答案:

答案 0 :(得分:4)

假设xy是多边形的中心,您错误地使用它们(您需要将x添加到x坐标和y到y坐标)并且您错过了另一个重要变量:r表示半径。您应该在公式中乘以y,而不是乘以r

换句话说:

class PolygonShape {

    int x, y, r;
    private Polygon p;

    public PolygonShape(int x, int y, int r) {
        this.x = x;
        this.y = y;
        this.r = r;       
    }

    // Provide a default radius of 100 pixels if no radius is given.
    public PolygonShape(int x, int y) {
        this(x, y, 100);
    }

    public void draw(Graphics g) {       
        p = new Polygon();
        for (int i = 0; i < 5; i++) {
            double angle = i * 2 * Math.PI / 5;
            p.addPoint((int) (x + r * Math.cos(angle)),
                       (int) (y + r * Math.sin(angle)));
        }
        g.drawPolygon(p); 
    }
} 

答案 1 :(得分:0)

另一种选择是在绘图之前在图形上设置平移:

final Graphics2D g2 = (Graphics2D)g.create();
g2.translate(x, y);
g2.drawPolygon(p);

您可能需要执行-x, -y,您必须尝试。

我正在研究一个新的图形对象(g2),以便翻译不是永久性的。

优点是,可以在多个地方绘制相同的形状,只需改变xy