public class DrawOval extends JFrame
{
private static final long serialVersionUID = 1L;
public class mypanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void drawTriangle(Graphics g,int x1,int y1,int x2,int y2,int x3,int y3)
//画三角,并填充
{
Polygon fill=new Polygon();
fill.addPoint(x1, y1);
fill.addPoint(x2, y2);
fill.addPoint(x3, y3);
g.setColor(Color.black);
g.drawPolygon(fill);
g.fillPolygon(fill);
}
public void midpointoval(int a,int b,Graphics g)
{
int x,y;
int xx,yy;
double d1,d2;
x=0;y=b;
d1=b*b+a*a*(-b+0.25);
g.drawLine(200+x, 200+y, 200+x, 200+y);
g.drawLine(200-x, 200-y, 200-x, 200-y);
g.drawLine(200+x, 200-y, 200+x, 200-y);
g.drawLine(200-x, 200+y, 200-x, 200+y);
xx=x;yy=y;
while(b*b*(x+1)<a*a*(y-0.5))
{
if(d1<0)
{
d1+=b*b*(2*x+3);
x++;
}
else
{
d1+=(b*b*(2*x+3)+a*a*(-2*y+2));
x++;y--;
}
g.drawLine(200+xx, 200+yy, 200+x, 200+y);
g.drawLine(200-xx, 200-yy, 200-x, 200-y);
g.drawLine(200+xx, 200-yy, 200+x, 200-y);
g.drawLine(200-xx, 200+yy, 200-x, 200+y);
xx=x;yy=y;
}
d2=Math.sqrt(b*(x+0.5))+Math.sqrt(a*(y-1))-Math.sqrt(a*b);
while(y>0)
{
if(d2<0)
{
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
x++;y--;
}
else
{
d2+=a*a*(-2*y+3);
y--;
}
g.drawLine(200+xx, 200+yy, 200+x,200+ y);
g.drawLine(200-xx, 200-yy, 200-x, 200-y);
g.drawLine(200+xx, 200-yy, 200+x, 200-y);
g.drawLine(200-xx, 200+yy, 200-x, 200+y);
xx=x;yy=y;
}
}
public void paint(Graphics g)
{
int a=Integer.parseInt(JOptionPane.showInputDialog("请输入a的值:"));
int b=Integer.parseInt(JOptionPane.showInputDialog("请输入b的值:"));
super.paint(g);
//画坐标上的箭头,每个箭头需要两个三角
drawTriangle(g,380,200,360,200,360,195);
drawTriangle(g,380,200,360,200,360,205);
drawTriangle(g,200,20,200,40,195,40);
drawTriangle(g,200,20,200,40,205,40);
g.setColor(Color.black);
//画坐标
g.drawLine(20, 200, 380, 200);
g.drawLine(200, 20, 200, 380);
g.drawString("x", 375, 220);
g.drawString("y", 170, 30);
midpointoval(a,b,g);
}
}
public DrawOval()
{
//控制窗口大小
this.setSize(420, 420);
//控制窗口位置,null为中
this.setLocationRelativeTo(null);
//控制是否可以放缩窗口,false不允许
this.setResizable(false);
//关闭
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
mypanel panel =new mypanel();
this.add(panel);
this.setVisible(true);
}
public static void main(String[] args) {
new DrawOval();
}
}
midpointoval函数里是中点画线法
java中点画线法——画椭圆
最新推荐文章于 2021-08-11 09:18:04 发布