⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 climb.java

📁 数值算法:爬山算法的实现 三个按键
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;

public class climb extends Frame implements ActionListener
{
	Button getNode,start,clear;
	TextField tf;
	int width=800,height=700;
	int centerX=width/2,centerY=height/2;
	int drawPen=0;
	int up=1,right=1,odd=1;
	double x0,y0;
	
	public climb()
	{
		super("爬山法!     制作人:  符双");
		setSize(width,height);
		setLocation(100,0);
		setResizable(false);
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		Panel p1=new Panel();
		
		p1.setBackground(Color.cyan);
		getNode=new Button("Get inital node");
		getNode.setBackground(Color.yellow);
		start=new Button("Start");
		start.setBackground(Color.green);
		clear=new Button("Clear");
		clear.setBackground(Color.white);
		tf=new TextField(10);
		
		
		p1.add(getNode);
		p1.add(start);
		p1.add(clear);
		p1.add(tf);
		add(p1,"South");
				
		getNode.addActionListener(this);
		start.addActionListener(this);
		clear.addActionListener(this);
	}
	
	public void paint(Graphics g)
	{
		int scale=50;
		double step=0.001;
		double e=0.000000001;
		
		if(drawPen==-1)
		{
			g.clearRect(0,0,width,height);
			drawPen=0;
		}
		
		if(drawPen==0)
		{
			double x,z;
			int rr,gg,bb;
			
			rr = 200;
			gg = 200;
			bb = 255;
			
			for(z=step; z<=0.5; z+=step)
			{
				g.setColor(new Color(rr,gg,bb));
				x = Math.sqrt((1/z-2)/2);
				g.fillOval(centerX-(int)x*scale/2,centerY-(int)x*scale/2,(int)x*scale,(int)x*scale);
								
				rr = (rr + 40) %255;
				gg = (gg + 10) %255;
				bb = (bb + 55) %255;
			}
			
			g.setColor(Color.black);
			g.drawLine(width/20,centerY,width*19/20,centerY);
			g.drawLine(width*19/20-10,centerY-5,width*19/20,centerY);
			g.drawLine(width*19/20-10,centerY+5,width*19/20,centerY);			
			g.drawString("x",width*19/20-10,centerY+15);
			
			g.drawLine(centerX,height/20,centerX,height*19/20);
			g.drawLine(centerX,height/20,centerX-5,height/20+5);
			g.drawLine(centerX,height/20,centerX+5,height/20+5);
			g.drawString("y",centerX+10,height/20+5);
		}
		
		if(drawPen==1)
		{
			g.setColor(Color.white);
			x0 = up*(Math.random()*5+1);
			y0 = right*(Math.random()*5+1);
			
			if(odd==1) { right *= -1; odd = 0; }
			else { up *=-1; odd = 1; }
			g.fillOval((int)(centerX+x0*scale-5),(int)(centerY-y0*scale-5),10,10);
		}
		
		if(drawPen==2)
		{
			g.setColor(Color.white);
			double x,y,t;
			t = Math.pow(x0*x0+y0*y0+2,-4)*4*x0*x0 +
			    Math.pow(x0*x0+y0*y0+2,-4)*4*y0*y0;
			    
			while(t>e)
			{
				x = x0 - Math.pow(x0*x0+y0*y0+2,-2)*2*x0;
				y = y0 - Math.pow(x0*x0+y0*y0+2,-2)*2*y0;
				g.fillOval((int)(centerX+x*scale-5),(int)(centerY-y*scale-5),10,10);
				t = Math.pow(x0*x0+y0*y0+2,-4)*4*x0*x0 +
				    Math.pow(x0*x0+y0*y0+2,-4)*4*y0*y0;
				x0 = x;
				y0 = y;
				
				try{ Thread.sleep(20); }
				catch(Exception ee) { }
			}
			
			tf.setText("  Get top!");
			tf.setBackground(Color.red);
		}			
	}
	
	public void update(Graphics g)
	{
		paint(g);
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==getNode)
		{
			drawPen=1;
			tf.setText("  Ready!");
			tf.setBackground(Color.yellow);
			repaint();
		}
		
		if(e.getSource()==start)
		{
			drawPen=2;
			tf.setText("  Go...");
			tf.setBackground(Color.green);
			repaint();
		}
		
		if(e.getSource()==clear)
		{
			drawPen=-1;
			tf.setText("");
			tf.setBackground(Color.white);
			repaint();
		}
	}
	
	public static void main(String arg[])
	{
		new climb().setVisible(true);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -