如何绘制100边正多边形

时间:2015-04-09 18:32:37

标签: java loops polygon

我正在尝试绘制一个规则的圆和一个100边的正多边形。我可以绘制常规圆圈:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Shapes extends JFrame implements ActionListener {

    private JButton button;
    private JPanel panel;
    public static void main(String[] args){

    }    

    private void createLine(){

        setDefaultCloseOperation(EXIT-ON-CLOSE);
        Container window=getContentPane();
        window.setLayout(new FlowLayout());

        panel=new JPanel();
        panel.SetPreferredSize(new Dimension(700, 700));
        panel.setBackground(Color.white);
        window.add(panel);

        button=new JButton("OK");
        window.add(button);
        button.addActionListener(this);
    }

    public void actionPerformed(ActionEvent event) {

        Graphics paper= panel.getGraphics();
        int r = 75;
        int x = 300;
        int y = 150;

        paper.drawOval(x,y,r,r);
    }
}

我不知道如何绘制常规的100边多边形(你使用循环函数吗?)

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

这是创建具有n个顶点(n-1个边)的正多边形的一般解决方案。 Rectangle参数用于设置边界

基本上,这个想法是从矩形的中心开始,你围绕区域旋转到n个顶点(360 / n作为旋转步骤)。来源也可用here

public static Polygon createPolygon(int vertices, double angleOffset, Rectangle r) {
        if (vertices < 1) throw new IllegalArgumentException ("Vertices must be > 0");
        double step = 2 * Math.PI / vertices;
        int[] x = new int[vertices];
        int[] y = new int[vertices];
        int xrad = r.width / 2;
        int yrad = r.height / 2;
        for (int i = 0; i < vertices; i++) {
            x[i] = r.x + xrad + (int) (Math.cos(angleOffset + i * step) * xrad);
            y[i] = r.y + yrad + (int) (Math.sin(angleOffset + i * step) * yrad);
        }
        Polygon p = new Polygon(x, y, vertices);
        return p;
    }

答案 1 :(得分:0)

您将不得不计算每个角的角度,对于正多边形中的每个角都是相同的。那么你想要每一方多久。然后运行for循环以将所有点添加到多边形对象。

Take a look at this example