我正在尝试绘制一个规则的圆和一个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边多边形(你使用循环函数吗?)
有人可以帮帮我吗?
答案 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循环以将所有点添加到多边形对象。