java实现分形

        分形,通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形是奇妙的,我们可以从图形任何一个部分看到图形整体的样子。比如康托三分集、谢尔宾斯基三角形等。

        分形通常要用到递归,程序调用自身的编程技巧称为递归说白了就是多次调用自身的方法。实现康托三分集和谢尔宾斯基三角形的代码如下:

package 递归;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
	@SuppressWarnings("serial")
	public class digui extends JFrame{
		public static void main(String[] args){
			digui dl = new digui();
			dl.showUI();
		}
		private void showUI() {
			this.setTitle("递归线段");
			this.setDefaultCloseOperation(3);
			this.setSize(600, 600);
			this.setVisible(true);
			this.setLayout(new FlowLayout());
			JButton btn01 = new JButton("康托三分集");
			this.add(btn01);
			JButton btn02 = new JButton("谢尔宾斯基三角形");
			this.add(btn02);
			btn01.addActionListener(new ActionListener(){
		    public void actionPerformed(ActionEvent e){
		    draw01(20,100,380,100);
		}
			});
			btn02.addActionListener(new ActionListener(){
			    public void actionPerformed(ActionEvent e){
			    draw02(27,100,473,100,250,450);
			}
				});
}
		public void draw01(int x1,int y1,int x2,int y2){
			int len=x2-x1;
			if(len<2)
				return;
			//得到窗体的画布对象
			Graphics g = this.getGraphics();
			g.drawLine(x1, y1, x2, y2);
			int x3=x1+len/3;
			int x4=x2-len/3;
			int y=y1+20;
			draw01(x1, y, x3, y);
			draw01(x4, y, x2, y);
		}
		public void draw02(int x1,int y1,int x2,int y2,int x3,int y3){
			int len=x2-x1;
			if(len<2)
				return;
			//得到窗体的画布对象
			Graphics g = this.getGraphics();
			g.drawLine(x1, y1, x2, y2);
			g.drawLine(x2, y2, x3, y3);
			g.drawLine(x1, y1, x3, y3);
			
			int x4=(x1+x2)/2;
			int x5=(x2+x3)/2;
			int x6=(x1+x3)/2;	
			int y4=(y1+y2)/2;
			int y5=(y2+y3)/2;
			int y6=(y1+y3)/2;
			
			g.drawLine(x4, y4, x5, y5);
			g.drawLine(x5, y5, x6, y6);
			g.drawLine(x4, y4, x6, y6);
			
			draw02(x1,y1,x4,y4,x6,y6);
			draw02(x4,y4,x2,y2,x5,y5);
			draw02(x6,y6,x5,y5,x3,y3);
		}
 }
	 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值