`
ycyxb104
  • 浏览: 26585 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

好玩的分形绘制

 
阅读更多
部分与整体以某种形式相似的形,称为分形。
首先我们举个例子:
       我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形。换句话说,较小的分支通过放大适当的比例后可以得到一个与整体几乎完全一致的花簇。因此我们可以说西兰花簇是一个分形的实例。
分形一般有以下特质:
在任意小的尺度上都能有精细的结构; 太不规则,以至难以用传统欧氏几何的语言描述; (至少是大略或任意地)自相似豪斯多夫维数会大於拓扑维数; 有著简单的递归定义。
(i)分形集都具有任意小尺度下的比例细节,或者说它具有精细的结构。
(ii)分形集不能用传统的几何语言来描述,它既不是满足某些条件的点的轨迹,也不是某些简单方程的解集。
(iii)分形集具有某种自相似形式,可能是近似的自相似或者统计的自相似。
(iv)一般,分形集的“分形维数”,严格大于它相应的拓扑维数。
(v)在大多数令人感兴趣的情形下,分形集由非常简单的方法定义,可能以变换的迭代产生。
 
用java写分形时,不同的图形根据不同的画法调用递归来实现,如:
科赫曲线:
public void draw1(int x1, int y1, int x2, int y2,int depth) {//科赫曲线
		g.drawLine(x1, y1, x2, y2);
		if (depth<=1)
			return;
		else {//得到三等分点
			double x11 = (x1 * 2  + x2)  / 3;
			double y11 = (y1 * 2  + y2) / 3;

			double x22 = (x1 + x2 * 2) / 3;
			double y22 = (y1 + y2 * 2) / 3;

			double x33 = (x11 + x22) / 2 - (y11 - y22) * Math.sqrt(3) / 2;
			double y33 = (y11 + y22) / 2 - (x22 - x11) * Math.sqrt(3) / 2;

			g.setColor(j.getBackground());
			g.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
			g.setColor(Color.black);
			draw1((int) x1, (int) y1, (int) x11, (int) y11,depth-1);
			draw1((int) x11, (int) y11, (int) x33, (int) y33,depth-1);
			draw1((int) x22, (int) y22, (int) x2, (int) y2,depth-1);
			draw1((int) x33, (int) y33, (int) x22, (int) y22,depth-1);
		}
	}
 正方形:
public void draw2(int x1, int y1, int m,int depth) {//正方形
		g.fillRect(x1, y1, m, m);
		m = m / 3;
		if (depth<=1)
			return;
		else{
		double x11 = x1 - 2 * m;
		double y11 = y1 - 2 * m;

		double x22 = x1 + m;
		double y22 = y1 - 2 * m;

		double x33 = x1 + 4 * m;
		double y33 = y1 - 2 * m;

		double x44 = x1 - 2 * m;
		double y44 = y1 + m;

		double x55 = x1 + 4 * m;
		double y55 = y1 + m;

		double x66 = x1 - 2 * m;
		double y66 = y1 + 4 * m;

		double x77 = x1 + m;
		double y77 = y1 + 4 * m;

		double x88 = x1 + 4 * m;
		double y88 = y1 + 4 * m;

		draw2((int) x11, (int) y11, (int) m,depth-1);

		draw2((int) x22, (int) y22, (int) m,depth-1);

		draw2((int) x33, (int) y33, (int) m,depth-1);

		draw2((int) x44, (int) y44, (int) m,depth-1);

		draw2((int) x55, (int) y55, (int) m,depth-1);

		draw2((int) x66, (int) y66, (int) m,depth-1);

		draw2((int) x77, (int) y77, (int) m,depth-1);

		draw2((int) x88, (int) y88, (int) m,depth-1);
		}

	}
 
谢冰斯基三角形:
public void draw3(int x1,int y1,int x2,int y2,int x3,int y3,int depth){//三角形
		
		double s = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
		g.drawLine(x1,y1,x2,y2);
		g.drawLine(x2,y2,x3,y3);
		g.drawLine(x1,y1,x3,y3);
//		if(s<3)
//			return;
		if (depth<=1)
			return;
		else
		{
		/*
		 * 上面的三角形
		 */
		double x11=(x1*3+x2)/4;
		double y11=y1-(s/4)*Math.sqrt(3);
		
		double x12=(x1+x2*3)/4;
		double y12=y11;
		
		double x13=(x1+x2)/2;
		double y13=y1;
		
		/*
		 * 左边的三角形
		 */
		double x21=x1-s/4;
		double y21=(y1+y3)/2;
		
		double x22=x1+s/4;
		double y22=y21;
		
		double x23=x1;
		double y23=y3;
		
		/*
		 * 右边的三角形
		 */
		double x31=x2+s/4;
		double y31=(y1+y3)/2;
		
		double x32=x2-s/4;
		double y32=y21;
		
		double x33=x2;
		double y33=y3;
		
		
		draw3((int)x11,(int)y11,(int)x12,(int)y12, (int)x13, (int)y13, depth-1);
		draw3((int)x21,(int)y21,(int)x22,(int)y22, (int)x23, (int)y23, depth-1);
		draw3((int)x31,(int)y31,(int)x32,(int)y32, (int)x33, (int)y33, depth-1);
		}
	}
 
科赫曲线是一种外形像雪花的几何曲线,所以又称为雪花曲线,它是分形曲线中的一种,具体画法如下:
1、任意画一个正三角形,并把每一边三等分;
2、取三等分后的一边中间一段为边向外作正三角形,并把这“中间一段”擦掉;
3、重复上述两步,画出更小的三角形
4、一直重复,直到无穷,所画出的曲线叫做科赫曲线。
 
小结:分形是个很好玩的东西,根据自己的奇妙想象可以画出很多很好看的图形,不仅仅是已经存在的,你可以创造出属于你自己的图形!
分享到:
评论

相关推荐

    基于C/C++语言的分形绘制设计源码

    该项目为基于C/C++语言的分形绘制软件设计源码,包含43个文件,包括10个PNG图像、8个Makefile、7个头文件、6个C++源文件、3个配置文件、2个光标文件、1个可执行文件、1个动态链接库和1个Markdown文件。软件具备绘制...

    看的见的算法 7个经典应用诠释算法精髓(8)-分形图的绘制:计算机生成艺术

    看的见的算法 7个经典应用诠释算法精髓(8)-分形图的绘制:计算机生成艺术 09-Fractal-Drawing 9-1 分形到底是什么鬼.mp4 9-2 递归绘制基础-.mp4 9-3 Vicsek分形图的绘制.mp4 9-4 为分形绘制添加交互.mp4 9-5 ...

    通过递归实现分形图形绘制

    在计算机图形学中,通过编程实现分形图形的绘制是一种有趣且富有挑战性的任务,尤其是使用递归算法。递归是程序设计中一种强大的工具,它允许函数调用自身来解决复杂问题,这在构建分形图像时非常适用。 本项目标题...

    vc++实现分形树的绘制

    在探讨“vc++实现分形树的绘制”这一主题时,我们不仅触及了计算机图形学的核心概念,还深入到了分形几何学的迷人世界。本文将详细解析代码片段中的关键知识点,包括如何在Visual C++(vc++)环境中构建一个基于界面...

    Matlab绘制分形图

    在本文中,我们将深入探讨如何使用Matlab进行分形图的绘制,重点是Koch曲线图、树形分形图和Sierpinski分形图的实现。Matlab是一款强大的数学计算软件,它提供了丰富的图形绘制功能,对于理解和创建分形几何形状特别...

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

    1.使用OpenGL设计了分形树,程序运行结果包括一棵带花的树和一棵结果实的树。 2.程序中使用曲面技术做了苹果,苹果挂在树上,比较逼真。 3.资源中包括程序源码文件夹、运行结果截图、实验报告(实验报告包括:实验...

    递归与Python Turtle分形树绘制详解(包含详细的完整的程序和数据)

    本文详细阐述了如何使用Python的turtle库进行递归函数的设计,并具体演示了一个绘制分形树的例子。主要内容涵盖递归的基础概念,turtle的基本操作以及如何用它们组合在一起创建一个动态可视化的递归模型。通过实际...

    基于GPU的高速Julia分形集绘制方法.pdf

    【基于GPU的高速Julia分形集绘制方法】 在计算机图形学领域,利用现代图形处理器(GPU)的强大并行计算能力已经成为加速复杂计算任务的重要手段。Julia分形集是一种在复平面上通过复变函数迭代形成的具有丰富细节和...

    简单分形几何图形的绘制

    "简单分形几何图形的绘制" 简单分形几何图形的绘制是计算机图形学中的一种重要技术,它可以生成复杂的图形,如雪花、树枝等。这种技术的核心是分形曲线的绘制算法,通过实现简单的Koch曲线及其派生曲线,可以生成...

    matlab代码实现分形维数计算,matlab绘制分形图形,matlab

    在描述中提到的“matlab绘制分形图形”可能指的是使用MATLAB生成各种分形图案,如曼德勃罗集、朱利亚集或者科赫曲线等。MATLAB提供了丰富的绘图函数,如`plot`、`surf`和`imshow`等,可以方便地创建和显示复杂的分形...

    分形树opengl

    OpenGL分形树绘制与MFC集成 本文将对OpenGL分形树绘制进行逐步分析,并对MFC集成进行详细的解释。 1. OpenGL分形树绘制 分形树是一种Fractal Geometry,它可以用来模拟自然景观,如树木、山脉等。OpenGL是一个...

    二维分形树

    接下来,让我们探讨如何在VC环境下实现L系统的分形树绘制: 1. **项目设置**:首先,在VC中创建一个新的Win32控制台应用程序项目。确保选择C++作为编程语言,并在项目配置中启用图形支持,例如使用GDI(Graphics ...

    java分形绘制科赫雪花曲线(科赫曲线)代码分享

    Java 分形绘制是计算机图形学中的一个有趣领域,它利用递归算法来生成复杂而美丽的图形。科赫雪花曲线(Koch Snowflake Curve)是一种典型的分形曲线,因其形状类似于雪花而得名。这个概念源自数学家弗里德里希·...

    mfc-quad.rar_MFC交互设计—IFS分形图形绘制

    MFC交互设计—IFS分形图形绘制"是一个基于C++ MFC(Microsoft Foundation Classes)框架的程序,旨在教授如何利用MFC进行交互式用户界面设计,并通过IFS(Iterated Function Systems,迭代函数系统)来绘制分形图形...

    julia分形集的绘制

    在实际的编程中,可以使用各种语言来绘制Julia集合,例如Python的`matplotlib`库、`numpy`库以及专门为分形绘制设计的库如`PyFractal`。`julia集`这个文件可能包含了使用特定语言和库的代码示例,用于生成和显示...

    tree_python_分形树叶_分形树_

    分形树就是一种利用分形理论绘制的树形图案,它通过迭代过程模拟自然树木的分支结构。 首先,我们要了解turtle模块。turtle是Python内置的一个图形库,它提供了一个简单的接口,用于在窗口上绘制图形。用户可以通过...

    分形设计程序,一种简易的分形应用软件

    分形设计程序是一种创新的计算机应用软件,专为创造复杂而美丽的几何形状和模式而设计。在本案例中,该程序被特别优化用于纺织和机械加工领域的设计工作,利用分形理论来生成独特的图案和结构。分形,源于数学概念,...

    迭代法绘制分形树

    简单绘制分形树的代码,doc格式,可以设置偏移角度数、分支比例、迭代次数

    HTML5 Canvas实现分形算法绘制的圣诞树与下雪动画效果源码.zip

    在这段代码中,分形算法被用来创建圣诞树的形状,通过递归地绘制更小的分支,形成层次分明、逼真的树冠效果。 HTML5 Canvas的绘图操作主要通过`context`对象实现,这个对象提供了大量的方法,如`fillRect`、`...

    多重分形,多重分形谱,matlab

    6. **多重分形谱的构建**:通过绘制log(Fq(k))与log(k)的关系图,可以得到H(q)曲线,即多重分形谱。H(q)与q的关系可以揭示数据的多重分形特性。 在提供的压缩包文件中,“Introduction_to_MFDFA4”可能是介绍MFDFA...

Global site tag (gtag.js) - Google Analytics