`
ShXin
  • 浏览: 13046 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

简单分形之谢宾斯基三角形

阅读更多

        学了一段时间的java,接触了很多所谓基础的东西,但总归是没有新奇感的,做出来的大多是一些思维上的产物,而分形出现后,才发现短短几行代码竟可变幻出如此美妙的事物。

        如果没有学习分形,又有谁会想到这张图是用代码敲出来的呢?

 

                            
         那么我们就来看看如何实现这个图形吧。先抛开颜色不管,仔细观察后,我们会发现,它其实就是一个大三角形里面不停的嵌套小三角形,这样想的话思路就会很简单,只要一个小递归就可以实现了。

         这里取三角形的高(h)和底边长的一半(r)作为参数表示点的坐标。

         首先在重绘方法中绘制出初始三角形: 

//重写窗体重绘方法
public void paint(Graphics g){
	super.paint(g);
	int x1=600,y1=50,r=270,h=580;
	g.drawLine(x1, y1, x1-r, y1+h);
	g.drawLine(x1, y1, x1+r, y1+h);
	g.drawLine(x1-r, y1+h, x1+r, y1+h); 
}

         现在我们来写递归函数,每次都传入外边的大三角形,这样它就会在大三角形中绘制出小三角形,随着递归次数增加,大三角形变小,如此循环,直到r、h=0时,停止递归:

public void SJ(int x1,int y1,int r,int h,Graphics g){
	
	//给图形上色,颜色与坐标相关即可做到颜色的变化
	Color c= new Color(x1%255,(x1+y1)%255,(y1*7)%255);
	g.setColor(c);
	
	g.drawLine(x1+r/2, y1+h/2, x1-r/2, y1+h/2);
	g.drawLine(x1-r/2, y1+h/2, x1, y1+h);
	g.drawLine(x1+r/2, y1+h/2, x1, y1+h);

	for(h=h/2,r=r/2;h>0&&r>0;h/=2,r/=2){
		SJ(x1,y1,r,h,g);
		SJ(x1-r,y1+h,r,h,g);
		SJ(x1+r,y1+h,r,h,g);
	}		
}

         最后只要在重绘方法中调用递归方法即可。

SJ(600,50,270,580,g);

         这样就完成了这个分形的基本图形,它有一个很洋气的学名——谢宾斯基三角形。

分享到:
评论

相关推荐

    vc++实现分形三角形

    在计算机图形学中,分形是一种非常有趣的现象,它可以通过简单的数学规则来生成复杂的图形。这些图形通常具有自相似性,即无论放大到多大的比例都能看到与整体相似的结构。分形在自然界中普遍存在,如海岸线、山脉等...

    分形图-谢尔宾斯基三角形-彩色.sb3

    分形图-谢尔宾斯基三角形-彩色

    02_Gasket_2D_Triangles_opengl分形_opengl_三角形_

    这个"02_Gasket_2D_Triangles_opengl分形_opengl_三角形_"项目是关于利用OpenGL实现2D彩色三角形分形的。在本文中,我们将深入探讨OpenGL、分形、以及如何用三角形来构建它们。 首先,我们要理解OpenGL的基本概念。...

    使用MFC实现的三角形分形(谢尔宾斯基三角形)

    代码是基于VS2015编写的,如果你的IDE高于此版本双击.sln文件...代码编译成功运行之后:先用鼠标在界面里面左键单击选择三个点作为三角形的顶点,然后双击界面即可迭代生成一次分形,再次双击即可迭代两次,以此类推

    fenxing.rar_三角形_三角形 分形

    三角形在计算机图形学中占据着核心地位,因为它们是最简单的多边形,可以被用来有效地构建复杂的3D模型。在分形算法中,三角形可以被用来创建网格,这些网格在每个迭代过程中会被细分,从而产生更多的三角形,进而...

    分形三角形

    opengl实现分形三角形,可以输入三角形的长度

    三角形分形绘图问题 C语言

    分形是以多种概念和方法相互冲击融合为特征的图形。分形所呈现的无穷玄机和美感引 发人们去探索。分形使人们觉悟到科学与艺术的融合,数学与艺术审美上的统一,使昨日枯 燥的数学不再仅仅是抽象的哲理,而是具体的...

    分形艺术之 论文 分形论文

    这种特性使得分形能够用简单的规则生成复杂的结构,如海岸线、山脉、云彩等自然现象,这些都能够在数学上被精确地描述。曼德博集是分形理论中最著名的例子之一,它是由一系列复数构成的集合,当这些复数经过特定的...

    图形分形之雪花代码

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

    一个基于VC++的简单分形树

    在本项目中,我们使用Visual C++(VC++)编程环境,结合Microsoft Foundation Classes(MFC)库,来实现一个简单的分形树生成器。这个程序利用递归算法来构建具有分形特性的树形结构。 首先,我们要理解分形的基本...

    递归出来的美丽分形世界

    标题中的“递归出来的美丽分形世界”暗示了我们将探讨的是计算机图形学中一个迷人的概念——分形,以及如何通过递归...通过学习和理解谢宾斯基三角的生成过程,不仅能够提升编程技能,还能领略到数学和艺术的交融之美。

    3分形例子代码.zip_matlab 分形_matlab分形案例_几何分形 matlab_分形 matlab_分形几何

    4. **谢尔宾斯基三角形**:通过将一个等边三角形分割成四个小等边三角形,然后对每个小三角形再次执行此过程,最终得到无限细分的分形结构。 在MATLAB中实现这些分形通常涉及循环、条件语句和迭代计算。代码可能会...

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

    而“Beyond_Scaling_laws (1)”可能是对传统分形尺度定律的扩展讨论,可能包含了如何解释和理解超出简单尺度定律的行为,以及这些行为在实际应用中的意义。 总的来说,多重分形分析是一种强大的工具,能够深入理解...

    简单及复杂分形实验报告

    这个过程始于一个等边三角形,然后在每一边的中间三分之一处添加一个60度角的小等边三角形,重复此过程无限次。最终形成的图形具有无限的边界长度,而面积却是有限的,这是分形特性的一个典型例子。 ### P-H曲线 P-...

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

    分形设计程序,一种简易的分形应用软件 在当今的创意产业中,设计师们不断寻求新颖的方法和工具来表达他们的创意,而分形设计程序正是应这一需求而生。作为一种创新的计算机应用软件,分形设计程序的设计理念是基于...

    分形动画,分形技术,分形

    曼德勃罗集是最著名的分形之一,通过迭代复数运算来生成,其边界展现出无尽的细节和复杂性。而朱利亚集则依赖于不同的复数初始值,可以生成各种各样的图案。 分形动画则是分形技术在动态图形中的应用。通过改变分形...

    分形基础课件--分形基础

    学习者将学会如何编写简单的计算机程序,模拟这些算法,从而直观地感受分形的生成过程。 在课件中,还将讲解分形在自然科学和社会科学中的应用。在物理学中,分形用于研究物质的微观结构;在生物学中,它们可以帮助...

    华中科技大学计算机图形学上机实验——分形三角形和三维场景绘制源码

    在华中科技大学的计算机图形学课程中,学生通过上机实验深入理解和掌握相关理论,其中一个实验主题是“分形三角形和三维场景绘制”。这个实验旨在让学生了解并实践分形几何和3D场景构建的基本原理。 分形三角形是一...

    递归的应用:最简单分形图形实现

    本示例通过创建一个最简单的分形图形来阐述递归的概念和实现方式。 分形,简单来说,是一种自相似的几何形状,即无论放大多少倍,局部细节都与整体保持相似性。在分形图形的绘制中,递归是核心思想,因为每个小部分...

Global site tag (gtag.js) - Google Analytics