在java中实现图形学中的椭圆算法
来源:互联网 发布:淘宝潮鞋店推荐 编辑:程序博客网 时间:2024/06/04 22:55
有同学向我要在java中实现图形学中的椭圆算法,画直线的算法的程序,在此就献丑了,把上大学时用java写的源代码给先学者做个参考,下面是实现椭圆的算法
/*author computer np
*test date
*(300,100)(400,100)
*
*/
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);
}/*MainFrame()*/
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();
}
}/*method actionPerformed*/
}
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)<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(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);
}// top of while
}catch(Exception e){}
d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
try
{
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(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);
}/* bottom of while*/
}catch(Exception e){}
} /*DrawLipse*/
}
class CloseWindow extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
- 在java中实现图形学中的椭圆算法
- 在java中实现图形学中的直线算法
- 图形学_椭圆扫描转换_中点椭圆算法
- 现代应用密码学中椭圆曲线求点集E以及点乘算法的java代码实现
- 中点画椭圆算法
- 椭圆生成算法---中点画椭圆法
- 计算机图形学 – 椭圆的中点生成算法
- 计算机图形学基础(2)——画圆,椭圆算法
- 中点椭圆算法的实现
- 堆排序算法在Java中的实现
- 计算机图形学中直线连接算法的Javascript实现
- 计算机图形学中的拉格朗日插值算法
- 计算机图形学-绘制圆、椭圆
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_3_椭圆生成算法
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_4_中点椭圆算法(上)
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_4_中点椭圆算法(下)
- 编程实现椭圆的中点算法
- Popy007(Twinsen)的专栏3-D图形学算法在游戏程序中的应用
- c#昨天,今天和明天(ZT)
- Jakarta Struts编程:使用Tiles,第一部分
- C 语言几个绝招
- [Memo]From My QQ
- Apache安装笔记(转贴)
- 在java中实现图形学中的椭圆算法
- 使用 C 语言的“准元程序”设计
- ORACLE SQL性能优化系列 (一)
- ORACLE SQL性能优化系列 (二)
- 在java中实现图形学中的直线算法
- ORACLE SQL性能优化系列 (三)
- COM+架构的基本思想——实现IUnknown::QueryInterfacce方法时的规则
- ORACLE SQL性能优化系列 (四)
- 开篇