`
happy_zhourong
  • 浏览: 13238 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

分形小实验

    博客分类:
  • java
 
阅读更多

学习了一段时间分形,我分别尝试了用循环和递归的方实现分形。

一、使用循环实现分形:

实验1:

private void drawGraphy1() {
		int x3;
		int y3;
		Random rand=new Random();
		int x0=rand.nextInt(500);
		int y0=rand.nextInt(500);
		x3=x1+x0;
		y3=y1+y0;
		int x11=rand.nextInt(500);
		int y11=rand.nextInt(500);
		x4=x1+x11;
		y4=y1+y11;
		int x12=rand.nextInt(500);
		int y12=rand.nextInt(500);
		x5=x1+x12;
		y5=y1+y12;
		int x13=rand.nextInt(500);
		int y13=rand.nextInt(500);
		x6=x1+x13;
		y6=y1+y13;
		for(int j=0;j<50000;j++){
			int f=rand.nextInt(3);
			System.out.print(f);
			if(f==1){
				x3=(x3+x4)/2;
				y3=(y3+y4)/2;
				g.drawLine(x3,y3,x3,y3);//画P点与任意一点的中点
			}else if(f==2){
				x3=(x3+x5)/2;
				y3=(y3+y5)/2;
				g.drawLine(x3,y3,x3,y3);	
			}else if(f==0){
				x3=(x3+x6)/2;
				y3=(y3+y6)/2;
				g.drawLine(x3,y3,x3,y3);	
			}
			
			
		}
		
		
	}

 

 

实验2:

private void drawGraphy3() {
		float a=1.40f;
		float b=1.56f;
		float c=1.40f;
		float d=-6.56f;
		double x=0;
		double y=0;
		double x1=0;
		double y1=0;
		int x2=0;
		int y2=0;
		
		for(int i=0;i<100000;i++){
			x1=d*Math.sin(a*x)-Math.sin(b*y);
			y1=c*Math.cos(a*x)+Math.cos(b*y);
			x2=(int) (x1*30+300);
			y2=(int) (y1*30+300);
			x=x1;
			y=y1;
			g.drawLine(x2, y2, x2, y2);
		}
		
	}

 



 

实验3:

private void drawGraphy4() {
		float a=1f;
		float b=4f;
		float c=60f;
		double x=0;
		double y=0;
		double x1=0;
		double y1=0;
		int x2=0;
		int y2=0;
		int d=2;
	
		
		for(int i=0;i<50000;i++){
			x1=y-Math.signum(x)*Math.sqrt(Math.abs(b*x-c));
			y1=a-x;
			x2=(int) (x1*d+400);
			y2=(int) (y1*d+400);
			Color [] array={Color.WHITE,Color.BLUE,Color.GREEN,Color.ORANGE,Color.PINK,Color.RED,Color.YELLOW};
			Random rand=new Random();
			
			switch(i){
				case 1000:
					//d=d+2;
					Color c1=array[rand.nextInt(array.length)];
					g.setColor(c1);
					break;
				case 2000:
					//d=d+2;
					Color c2=array[rand.nextInt(array.length)];
					g.setColor(c2);
					break;
				case 3000:
					//d=d+2;
					Color c3=array[rand.nextInt(array.length)];
					g.setColor(c3);
					break;
				case 4000:
					//d=d+2;
					Color c4=array[rand.nextInt(array.length)];
					g.setColor(c4);
					break;
			}
			System.out.println("d="+d);
			
			x=x1;
			y=y1;
			g.drawLine(x2, y2, x2, y2);
			System.out.println("x1="+x1);
			System.out.println("y1="+y1);
			System.out.println("x2="+x2);
			System.out.println("y2="+y2);
		}
		
	}

 

 

 

 


实验4:

public void graphic4(int x1,int y1,int x2,int y2) {
		if(x1>0&&y1>0&&x2>0&&y2>0){
		    for(int i=0;i<25;i++){
		    	x1=x1-5;
				y1=y1+5;
				x2=x2+5;
				y2=y2+5;
				g.setColor(new Color(10*i,10*i,10*i));
				g.fillRect(x1,y1,Math.abs(x2-x1+20),15);
		    }
		} 
		
	}

 

 

 

二、使用递归实现分形:

实验1:谢尔宾斯基三角形

void graphic2(int x1,int y1,int x2,int y2,int count) {
		int x0=0;
		int y0=0;
		int x3=0;
		int y3=0;
		int x4=0;
		int y4=0;
		int x5=0;
		int y5=0;
		
		x0=(x1+x2)/2;
		y0=y1;
		x3=x0;
		y3=(int) (y1-Math.sqrt(3)*Math.abs(x2-x1)/2);
		g.drawLine(x1, y1, x2, y2);
		g.drawLine(x1, y1, x3, y3);
		g.drawLine(x3, y3, x2, y2);
		x4=(x1+x3)/2;
		y4=(y1+y3)/2;
		x5=(x2+x3)/2;
		y5=y4;
		g.drawLine(x4, y4, x0, y0);
		g.drawLine(x0, y0, x5, y5);
		g.drawLine(x4, y4, x5, y5);
		count--;
		if(count>0){
			graphic2(x4,y4,x5,y5,count);
			graphic2(x1,y1,x0,y0,count);
			graphic2(x0,y0,x2,y2,count);
		}
				
	}

 
 

 

实验2:谢尔宾斯基地毯

	void graphic3(int x1, int y1, int x2, int y2, int count) {
		
		int x3=0;
		int y3=0;
		int x4=0;
		int y4=0;
		x3=x1+Math.abs(x2-x1)/3;
		y3=y1+Math.abs(y2-y1)/3;
		x4=x2-Math.abs(x2-x1)/3;
		y4=y2-Math.abs(y2-y1)/3;
		g.drawLine(x1,y3,x2,y3);
		g.drawLine(x1,y4,x2,y4);
		g.drawLine(x3,y1,x3,y2);
		g.drawLine(x4,y1,x4,y2);
		count--;
		if(count>0){
			graphic3(x1,y1,x3,y3,count);
			graphic3(x3,y1,x4,y3,count);
			graphic3(x4,y1,x2,y3,count);
			graphic3(x1,y3,x3,y4,count);
			graphic3(x4,y3,x2,y4,count);
			graphic3(x1,y4,x3,y2,count);
			graphic3(x3,y4,x4,y2,count);
			graphic3(x4,y4,x2,y2,count);
		}
	}

 

 

实验3:

void graphic5(int x1, int y1, int x2, int y2, int k) {
		System.out.println("in---count:"+count);
		int x3=0;
		int y3=0;
		int x4=0;
		int y4=0;
		int x5=0;
		int y5=0;
		int x6=0;
		int y6=0;
		int x7=0;
		int y7=0;
		int x8=0;
		int y8=0;
		int x9=0;
		int y9=0;
		x3=(int) (x1-Math.sqrt(3)*(y2-y1)/2);
		y3=y2+(y2-y1)/2;
		x4=(int) (x1+Math.sqrt(3)*(y2-y1)/2);
		y4=y3;
		g.setColor(Color.RED);
		g.drawLine(x1, y1, x2, y2);
		g.setColor(Color.YELLOW);
		g.drawLine(x3, y3, x2, y2);
		g.setColor(Color.ORANGE);
		g.drawLine(x4, y4, x2, y2);
		//count--;
		k++;
		x5=x1;
		y5=(y1+y2)/2;
		x6=(x2+x3)/2;
		y6=(y2+y3)/2;
		x7=(x2+x4)/2;
		y7=y6;
		x8=(x1+x3)/2;
		y8=(y1+y3)/2;
		x9=(x1+x4)/2;
		y9=y8;
		if(count<6){
			if(k<count){
				graphic5(x1,y1,x5,y5,k);
				graphic5(x8,y8,x6,y6,k);
				graphic5(x9,y9,x7,y7,k);
			}
		}
		
		System.out.println("out---count:"+count);
	}

 

 

实验4:

void graphic6(int x1, int y1, int x2, int y2, int k) {
		 g.drawOval(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
		int x3=0;
		int y3=0;
		int x4=0;
		int y4=0;
		int x5=0;
		int y5=0;
		int x6=0;
		int y6=0;
		x3=x1;
		y3=y1+(y2-y1)/4;
		x4=x1+(x2-x1)/2;
		y4=y2-(y2-y1)/4;
		x5=x4;
		y5=y1+(y2-y1)/4;
		x6=x2;
		y6=y4;
		g.drawOval(x3, y3, Math.abs(x3-x4), Math.abs(y3-y4));
		g.drawOval(x5, y5, Math.abs(x5-x6), Math.abs(y5-y6));
		k--;
		if(k>0){
			graphic6(x3,y3,x4,y4,k);
			graphic6(x5,y5,x6,y6,k);
		}
		
	}

 

 

  • 大小: 21.2 KB
  • 大小: 48.8 KB
  • 大小: 121.9 KB
  • 大小: 24.5 KB
  • 大小: 36.5 KB
  • 大小: 61.9 KB
  • 大小: 34.7 KB
  • 大小: 24.4 KB
分享到:
评论

相关推荐

    简单及复杂分形实验报告

    介绍几种常见的分形实验及简单算法 包括Koch雪花曲线,P-H曲线,Julia等

    计算机图形学—OpenGL(C++)分形树的设计(分形树/分形草)包含程序源码+运行结果截图+实验报告

    1.使用OpenGL设计了分形...3.资源中包括程序源码文件夹、运行结果截图、实验报告(实验报告包括:实验目的、实验内容、实验方案、实验步骤、运行结果)。 4.如果运行有问题,可以在CSDN上向我提问,看见了一定会回答。

    双煤层采动岩体裂隙分形特征实验研究

    随着下层煤工作面推进距离的增大,双煤层采动岩体裂隙分形维数经历了从小到大再到小并稳定的变化过程;当下层煤开采结束且上覆岩层移动基本稳定之后,双煤层采空区冒落带、裂隙带的岩体裂隙分形维数分别为1.066 3,0.999...

    刀具压入破岩声发射分形特征实验

    选用一字型刀具对花岗岩进行静力破碎实验,采用AEwin-USB型声发射信号采集系统采集声发射信号,应用分形理论分析不同加载速率下声发射分形特性.结果表明,随着加载速率的增加,刀具破岩程度愈显剧烈,且伴随着的声发射...

    计算机图形学实验1三维分形的实现(附实验报告)

    计算机图形学实验 三维分形 实现交互功能 各面不同颜色绘制 附有实验报告

    STM32F407单片机(HAL库版本) FPU测试(Julia分形)实验软件例程源码.rar

    STM32F407单片机(HAL库版本) FPU测试(Julia分形)实验软件例程源码.rar

    图形学分形造型

    就图形学分形造型设计的云图。实现了云图的绘制过程,最后成型,直接就可以用了。

    变步长和变阈值的分形小波图像压缩算法

    摘要:针对目前分形小波混合图像压缩方法存在的不足,提出了一种新的分形小波...实验表明,相对于经典的基于小波树的分形图像压缩方法,该改进算法在不影响信 噪比和解码图像质量的前提下,提高了压缩比和编码速度。

    图形分形之雪花代码

    python代码,可以实现画数学图形中的分形之雪花,很漂亮,很实用

    煤岩孔隙结构分形特征表征方法研究

    从分形定义出发,建立了新的煤岩孔隙结构分形特征表征方法,然后通过煤岩压汞实验对分形定义法和文章新建方法进行对比评价,最后对煤岩分形区间和分形维数进行了探讨。结果表明,通过文章提出的毛管压力法确定的分形区间...

    中梁山南矿构造煤吸附孔分形特征

    采集华蓥山煤田中梁山南矿9个有代表性的煤层样品进行低温氮吸附实验,分析构造煤吸附孔分形特征及分形维数与气体吸附能力的关系。低温氮吸附、解吸曲线表明不同变形序列构造煤在相对压力0.5~1.0范围内吸附特征各异。...

    中—高煤级煤孔隙分形特征

    以平煤股份十三矿受岩浆侵入影响形成的不同煤化作用程度的10个原煤样品的压汞实验和低温氮气吸附实验数据为依据,应用孔隙的分形研究方法,揭示了中—高煤级煤的孔隙分形特征及其与煤级之间的内在联系。研究表明,压汞...

    基于低温氮实验的页岩吸附孔分形特征

    以低温氮吸附实验数据为基础,分析了重庆綦江观音桥剖面下志留统龙马溪组页岩样品吸附孔的吸附特征,采用FHH分形模型,计算了吸附孔分维值D,定量研究了分维值对页岩孔隙参数的变化规律。结果表明:脱附支得到的孔径分布...

    贵州省突出煤层孔隙分形特征研究

    以贵州省富煤区6个突出煤层为研究对象,采用液氮吸附实验和压汞实验,分析了各煤层煤样的孔隙大小分级,计算了煤样分形维数,并分析了各煤层煤样孔隙分形特征及其与瓦斯吸附量、煤样渗透性的关系。结果表明:6个煤层煤样...

    煤体纳米级孔隙低温氮吸附特征及分形性研究

    为了研究不同煤级煤体纳米级孔隙结构特性,通过低温氮吸附法对宿州邹庄矿、平顶山八矿、鹤壁九矿的8组煤样进行对比实验,分析了煤孔隙结构特性,并运用孔隙分形几何学理论基础建立FHH模型,揭示了煤的变质程度和破坏程度...

    基于分形理论的高煤阶煤层气储层气-水相渗计算方法及应用

    通过理论推理和室内实验,研究了利用分形理论计算高煤阶煤储层气-水相渗的方法,结果表明:煤样孔、渗物性越好,最大进汞饱和度越高,两相渗流区越大,等渗点水相饱和度越小;通过分形理论利用毛管压力曲线计算煤岩气-水相...

    论文研究-基于WPTMM的PM2.5与气象条件关系的联合多重分形分析.pdf

    鉴于分形和小波在处理复杂非线性系统时的优势, 本文提出了基于小波包变换模极大值(wavelet packet transform modulus maxima, WPTMM)的联合多重分形, 首先对变量序列进行小波包分解, 使用模极大值进行去噪, 然后...

    煤体孔隙结构及分形特征的实验研究

    采用低温氮吸附实验测定6种煤样的孔隙参数及等温吸附曲线,研究煤样孔隙表面分维数与孔隙参数之间的关系。采用FHH模型计算各煤样的孔隙表面分形维数。结果表明:表面分维数能够较好地表征孔隙结构的非均质性及复杂性;...

    旗舰版STM32F407单片机开发板50例实验例程软件工程源码合集.zip

    实验46 FPU测试(Julia分形)实验 实验47 DSP测试实验 实验48 手写识别实验 实验49 T9拼音输入法实验 实验5 外部中断实验 实验50 串口IAP实验 实验51 USB读卡器(Slave)实验 实验52 USB声卡(Slave)实验 实验53 USB U盘...

    页岩气藏岩石孔隙分形特征

    以美国Fort Worth盆地石炭系Barnett组页岩和四川盆地志留系龙马溪组页岩为研究对象,基于分形理论和方法,以压汞实验测试结果为基础,对页岩孔隙结构展开定量化研究,计算了不同孔隙的分形维值,通过压汞曲线特征和分形...

Global site tag (gtag.js) - Google Analytics