永发信息网

java 椭圆算法

答案:1  悬赏:80  手机版
解决时间 2021-04-15 00:16
  • 提问者网友:疯孩纸
  • 2021-04-13 23:41
java画的
画布大小900,600
中点算法要求输入坐标x,y,长轴,短轴,得到椭圆。
brensenham算法,输入坐标x,y,圆半径,得到圆。
最佳答案
  • 五星知识达人网友:愁杀梦里人
  • 2021-04-14 00:24
以下代码,将输出一个椭圆,再有问题,我可远程助你。如下:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Lipse 
{
 public static void main(String[] args)
 {
  new MainFrame();
 }
}
class MainFrame extends JFrame implements ActionListener
{
 JPanel pane=new JPanel();
 JTextField T_a,T_b;
 JButton Draw,Show;
 JLabel L_a,L_b;
 int a,b;
 MainFrame()
 {
  super("DrawLipse Window");
  Container con=this.getContentPane();
  con.setLayout(null);

  pane.setBounds(20,20,850,550);
  pane.setBackground(new Color(100,156,200));
  con.add(pane);

  L_a=new JLabel("请输入长半径:a");
  L_a.setBounds(180,580,100,20);
  con.add(L_a);

  L_b=new JLabel("请输入短半径:b");
  L_b.setBounds(180,630,100,20);
  con.add(L_b);


  T_a=new JTextField();
  T_a.setBounds(300,580,50,20);
  con.add(T_a);

  T_b=new JTextField();
  T_b.setBounds(300,630,50,20);
  con.add(T_b);

  Draw=new JButton("画椭圆");
  Draw.setBounds(550,580,90,30);
  Draw.addActionListener(this);
  con.add(Draw);

  Show=new JButton("显示坐标");
  Show.setBounds(550,620,90,30);
  Show.addActionListener(this);
  con.add(Show);

  this.addWindowListener(new CloseWindow());
  this.setBounds(20,20,900,700);
  this.setVisible(true);
  this.setResizable(false);

 }
 public void actionPerformed(ActionEvent e)
 {
     if(e.getSource()==Draw)
     {
      a=Integer.parseInt(T_a.getText().trim());
      b=Integer.parseInt(T_b.getText().trim());
      Line line=new Line(this);
      line.drawLipse(a,b); 
     }
     if(e.getSource()==Show)
     {
       Graphics g1=this.pane.getGraphics();
          g1.setColor(Color.PINK);
          g1.drawLine(0,300,920,300);//----x---
          g1.drawLine(410,0,410,720);//----y---
          g1.dispose();
     }

 }
}
class Line
{
 MainFrame jb;
 Line(MainFrame jb)
 {
  this.jb=jb;
 }
 public void drawLipse(int a,int b)
 {
  int x,y;
  double d1,d2;
  x=0;  y=b;
  d1=b*b+a*a*(-b+0.25);
  Graphics g=jb.pane.getGraphics();
  g.setColor(Color.red);
  g.drawLine(x+410,y+300,x+410,y+300);
  g.drawLine(-x+410,-y+300,-x+410,-y+300);
  g.drawLine(-x+410,y+300,x+410,-y+300);
  g.drawLine(x+410,-y+300,x+410,-y+300);
  try
  {
   while(b*b*(x+1)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(x+410,y+300,x+410,y+300);
           g.drawLine(-x+410,-y+300,-x+410,-y+300);
           g.drawLine(-x+410,y+300,x+410,-y+300);
           g.drawLine(x+410,-y+300,x+410,-y+300);
           Thread.sleep(30);
        }

     }catch(Exception e){}

 }  

}
class CloseWindow extends WindowAdapter
{
 public void windowClosing(WindowEvent e)
 {
  System.exit(0);
 }
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯