import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class StarTest
{
public static void main(String[] args)
{
MyFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class MyFrame extends JFrame
{
public MyFrame()
{
setBounds(200, 200, 400, 400);
setTitle("Star");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container con = getContentPane();
con.add(new MyPanel());
}
}
class MyPanel extends JPanel
{
public void paintComponent(Graphics g)
{
Star star = new Star();
star.draw(150, 250, 120, g);
//star.draw(g, 150, 150, 100);
}
}
class Star
{
private final double PI = Math.PI;
//(x0,y0)五角星的左下角顶点的坐标,r五角星的外接圆半径
public void draw(int x0, int y0, int r, Graphics g)
{
int x1, y1, x2, y2, x3, y3, x4, y4;
g.setColor(Color.red);
//计算其它4个顶点的坐标
x1 = (int) (x0 + r * Math.sin(PI / 5));
y1 = (int) (y0 - r * (1 + Math.cos(PI / 5)));
x2 = (int) (x0 + 2 * r * Math.sin(PI / 5));
y2 = y0;
x3 = (int) (x0 - 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
y3 = (int) (y0 - 2 * r * Math.sin(PI / 5) * Math.cos(PI / 10));
x4 = (int) (x2 + 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
y4 = y3;
//将顶点用直线依次连接起来
g.drawLine(x0, y0, x1, y1);
g.drawLine(x1, y1, x2, y2);
g.drawLine(x2, y2, x3, y3);
g.drawLine(x3, y3, x4, y4);
g.drawLine(x4, y4, x0, y0);
}
//(x,y)五角星的中心点的坐标,为五角星的外接圆半径
public void draw(Graphics g, int x, int y, int r)
{
int x0, y0, x1, y1, x2, y2, x3, y3, x4, y4;
//计算5个顶点的坐标
x0 = (int) (x - r * Math.sin(PI / 5));
y0 = (int) (y + r * Math.cos(PI / 5));
x1 = x;
y1 = y - r;
x2 = (int) (x + r * Math.sin(PI / 5));
y2 = y0;
x3 = (int) (x0 - 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
y3 = (int) (y0 - 2 * r * Math.sin(PI / 5) * Math.cos(PI / 10));
x4 = (int) (x2 + 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
y4 = y3;
//将顶点用直线依次连接起来
g.drawLine(x0, y0, x1, y1);
g.drawLine(x1, y1, x2, y2);
g.drawLine(x2, y2, x3, y3);
g.drawLine(x3, y3, x4, y4);
g.drawLine(x4, y4, x0, y0);
}
}