`
布衣Sao年
  • 浏览: 7974 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

递归出来的美丽分形世界

阅读更多

  自从认识分形,发现世界上任何美丽的事物都可以用分形来展示出来,小到街边的花花草草、大到地球的各个板块,海岸线还有活泼可爱的小动物造型,人眼的世界里有规律的物体总是那么美妙,基本样板通过递归出来的图案不仅呈现出规律的图片,而且与现实万物总有惊人的相似性,话不多说,有图才有真相:

谢宾斯基三角:给群山穿上美丽的衣裳

 

 

毕达哥拉斯树:爱情电影中都有那么一种场景,一望无际的草地中央坐落着一棵参天古树,树下的男女主角背靠着古树,祈祷一辈子的幸福



 

今天的重点:科赫曲线

基本样板:

1次迭代

 2次迭代:



 
 细心的你也许可以从上面看出规律了,下面是主要代码实现:

/**
	 * 字符串递归得到一个新字符串
	 * @param s  原字符串
	 * @param DGs 递归原则字符串
	 * @return
	 */
	public String DG(String s,String DGs){
		String newString;
		if(count==0){
			return s;
		}
		if(s==""){
			newString = "F";
//		System.out.println("newString:  "+newString);
		}
		else{
			char[] ch=s.toCharArray();
			char[] DGch=DGs.toCharArray();		
//		System.out.println("ch的个数:"+ch.length);
//		System.out.println("DGch的个数:"+DGch.length);		
			int countF=0;
			int countOthers=0;
			//统计字符串的f和+-的个数
			for(int i=0;i<ch.length;i++){
				if(ch[i]=='F'){
					countF++;
				}
				else{
					countOthers++;
				}
			}
//		System.out.println("F的个数:"+countF);
//		System.out.println("+-的个数:"+countOthers);			
			//生成新字符数组
			char[] newCh=new char[DGch.length*countF+countOthers];			
//		System.out.println("新数组长度:"+(DGch.length*countF+countOthers));
			int nPos=0;
			for(int i=0;i<ch.length;i++){
				if(ch[i]=='F'){
					//将递归字符串放到新串中
					for(int j=0;j<DGch.length;j++){
						newCh[nPos]=DGch[j];
						nPos++;
					}
				}
				else{
					newCh[nPos]=ch[i];
					nPos++;
				}
			}
//		System.out.println("nPos的大小:"+nPos);
			//将数组转换成字符串返回
			newString = new String(newCh);
		}
//		System.out.println("newString:  "+newString);
		count--;
		newString=DG(newString,DGs);
		return newString;	
	}

原字符串代表初始字符串,可以是空,然后是递归原则字符就是“F”->"F-F++F-F",然后依次用这个原则递归不同代数就可以得到新生代字符串,在自己定义每个字符的意义,比如科赫曲线意义:F代表向前画一根线,“-”代表逆时针旋转60度,“+”代表顺时针旋转120度,所以“F”就是上面1次迭代图,“F-F++F-F”是上面的2次迭代图,而我们可以改变“+”“-”所旋转角度,从而得到自由旋转的曲线,不多说,上图:

是不是很像细胞:



 

乌龟么?



 这是向日葵!



   不仅仅这些,改变角度还有很多很多的图案,自己去尝试尝试。。。

    我们还可以定义很多简单的样板和规律,比如树杈的递归,三叉递归出一棵枝叶茂密的大树等等等等,发挥你的想象,展现在你眼前的必然是一个美丽的分形世界。

  • 大小: 77.8 KB
  • 大小: 47.7 KB
  • 大小: 37.4 KB
  • 大小: 38.3 KB
  • 大小: 47.6 KB
  • 大小: 39.3 KB
  • 大小: 31.7 KB
分享到:
评论

相关推荐

    VC 递归法图形分形算法.rar

    扣氏曲线(Koch Curve)是一种典型的分形,通过迭代和递归可以生成越来越复杂且美丽的曲线。 3. **扣氏曲线**:扣氏曲线是1904年由瑞典数学家尼尔斯·赫尔曼·冯·科赫提出的一种几何曲线。其生成过程是将一条直线...

    turtle-递归美学-分形树-draw_branch.rar

    在这个名为“turtle-递归美学-分形树-draw_branch.rar”的压缩包中,我们找到了一个名为`draw_branch.py`的文件,它展示了如何利用递归技术来创建美丽的分形树。分形是一种具有自相似性的几何形状,即无论在大尺度...

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

    本项目标题“通过递归实现分形图形绘制”旨在教给初学者如何利用递归方法创建出美丽的分形图形。在VS2015环境下,你可以通过这个项目学习到如何设置和编译C++项目,并了解递归在实际编程中的应用。 首先,我们需要...

    递归画分形(cantor,kock,siepinski)

    在计算机图形学中,这种算法可以用来生成复杂的图形,并且随着迭代次数增加,细节会越来越丰富,形成美丽的分形图案。这些分形不仅在理论上引人入胜,也常被用于艺术创作和视觉设计中,展示了数学与美学的完美结合。

    经典的分形入门程序-Koch曲线的递归算法

    **正文** 分形,一种在自然界中广泛存在的几何形态,具有自相似性和无穷复杂性,是数学、计算机科学和艺术的交汇点。...这个入门程序不仅适合初学者,也对有一定编程基础的人提供了一个有趣的探索分形世界的机会。

    雪花分形-OpenGL

    总的来说,通过OpenGL和递归,我们可以生动地展现雪花分形的美丽和复杂性,不仅展示了数学的美妙,也提供了对计算机图形学深入理解的机会。学习并实现这样的项目有助于提升对OpenGL、分形理论以及递归编程的理解,...

    Matlab绘制分形图

    总的来说,通过Matlab绘制分形图不仅能够展示数学的美丽,也能够帮助我们理解分形理论的基本概念,如自相似性、迭代和无限细节。这不仅在数学和计算机科学中有应用,还在物理学、生物学、地理学等多个领域有着广泛的...

    OpenGL分形树

    在本项目"OpenGL分形树"中,我们利用OpenGL库和递归算法在Microsoft Visual C++ (VC++)环境中生成了美丽的分形树图形。下面我们将深入探讨这两个核心概念。 首先,OpenGL是一个跨语言、跨平台的编程接口,用于生成...

    计算机图形学分形源代码

    通过研究这些源代码,我们可以学习到计算机图形学中的基本算法、数据结构和优化技巧,同时还能了解分形几何的美丽和深度。这不仅有助于提升编程技能,还能让我们更深刻地理解自然界中复杂形状的数学本质。无论是对于...

    递归实现的最简单分型图形实现

    在计算机科学领域,分形图形是一种具有自相似性质的几何形态,它们在不同尺度上重复出现,展现出惊人的复杂性和美丽。本主题聚焦于利用递归算法来实现这些分形图形,尤其是科赫雪花,这是一种经典的分形示例。递归是...

    用递归的方法画分形图VC源代码

    在编程世界中,分形是一种具有自相似性的几何形状,它们在不同尺度上呈现...通过学习和分析这些源代码,开发者可以了解到如何利用递归算法在C++环境中生成美丽的分形图形,这有助于深入理解分形几何和递归编程的概念。

    利用递归的方法画图

    在计算机图形学领域,递归是一种强大的工具,可以...它不仅展示了递归的强大功能,还能帮助我们理解分形的美丽和复杂性。通过不断地学习和实践,我们可以创造出更多独特的递归图形,进一步探索计算机图形学的奇妙世界。

    用C语言编写的分形树

    分形树是一种在计算机图形学中常见的几何形态,它展示了自然界中许多复杂结构的自相似性。这种结构可以通过数学公式和...通过这个项目,不仅可以学习到分形艺术的美丽,还能深入理解C语言和计算机图形学的基础知识。

    Java图形分形实例源码.rar

    在Java中,通过利用Java AWT(Abstract Window Toolkit)或Swing库,可以创建出交互式的图形界面来展示这些美丽的分形图案。 在描述中提到,这个源码可能有一定的复杂性,暗示可能涉及到递归算法和复杂的图形计算。...

    二维分形树

    5. **递归绘制**:为了形成分形,我们需要对每个“F”字符进行递归处理。这意味着在绘制当前线段后,将按照一定比例缩小并重复整个过程,直到达到预设的迭代次数或者线段长度达到最小值。 6. **用户交互**:为了...

    fun-fractals:借助分形对递归和图形进行实验

    **分形**是一种在自然界中广泛存在的几何形态,它们具有自相似性,即在不同尺度上呈现出相似的结构。...在"fun-fractals-main"这个项目中,你将有机会亲自动手实践这些概念,探索更多关于分形和递归的奇妙世界。

    e语言-易语言画分形图案简化版

    总的来说,《易语言画分形图案简化版》是一个寓教于乐的编程项目,它不仅展示了分形图案的美丽,还提供了一个学习易语言图形编程的实践平台。对于想要掌握易语言或对分形艺术感兴趣的开发者来说,这是一个不可多得的...

Global site tag (gtag.js) - Google Analytics