学了一段时间的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);
这样就完成了这个分形的基本图形,它有一个很洋气的学名——谢宾斯基三角形。
相关推荐
在计算机图形学中,分形是一种非常有趣的现象,它可以通过简单的数学规则来生成复杂的图形。这些图形通常具有自相似性,即无论放大到多大的比例都能看到与整体相似的结构。分形在自然界中普遍存在,如海岸线、山脉等...
分形图-谢尔宾斯基三角形-彩色
这个"02_Gasket_2D_Triangles_opengl分形_opengl_三角形_"项目是关于利用OpenGL实现2D彩色三角形分形的。在本文中,我们将深入探讨OpenGL、分形、以及如何用三角形来构建它们。 首先,我们要理解OpenGL的基本概念。...
代码是基于VS2015编写的,如果你的IDE高于此版本双击.sln文件...代码编译成功运行之后:先用鼠标在界面里面左键单击选择三个点作为三角形的顶点,然后双击界面即可迭代生成一次分形,再次双击即可迭代两次,以此类推
三角形在计算机图形学中占据着核心地位,因为它们是最简单的多边形,可以被用来有效地构建复杂的3D模型。在分形算法中,三角形可以被用来创建网格,这些网格在每个迭代过程中会被细分,从而产生更多的三角形,进而...
opengl实现分形三角形,可以输入三角形的长度
分形是以多种概念和方法相互冲击融合为特征的图形。分形所呈现的无穷玄机和美感引 发人们去探索。分形使人们觉悟到科学与艺术的融合,数学与艺术审美上的统一,使昨日枯 燥的数学不再仅仅是抽象的哲理,而是具体的...
这种特性使得分形能够用简单的规则生成复杂的结构,如海岸线、山脉、云彩等自然现象,这些都能够在数学上被精确地描述。曼德博集是分形理论中最著名的例子之一,它是由一系列复数构成的集合,当这些复数经过特定的...
python代码,可以实现画数学图形中的分形之雪花,很漂亮,很实用
在本项目中,我们使用Visual C++(VC++)编程环境,结合Microsoft Foundation Classes(MFC)库,来实现一个简单的分形树生成器。这个程序利用递归算法来构建具有分形特性的树形结构。 首先,我们要理解分形的基本...
标题中的“递归出来的美丽分形世界”暗示了我们将探讨的是计算机图形学中一个迷人的概念——分形,以及如何通过递归...通过学习和理解谢宾斯基三角的生成过程,不仅能够提升编程技能,还能领略到数学和艺术的交融之美。
4. **谢尔宾斯基三角形**:通过将一个等边三角形分割成四个小等边三角形,然后对每个小三角形再次执行此过程,最终得到无限细分的分形结构。 在MATLAB中实现这些分形通常涉及循环、条件语句和迭代计算。代码可能会...
而“Beyond_Scaling_laws (1)”可能是对传统分形尺度定律的扩展讨论,可能包含了如何解释和理解超出简单尺度定律的行为,以及这些行为在实际应用中的意义。 总的来说,多重分形分析是一种强大的工具,能够深入理解...
这个过程始于一个等边三角形,然后在每一边的中间三分之一处添加一个60度角的小等边三角形,重复此过程无限次。最终形成的图形具有无限的边界长度,而面积却是有限的,这是分形特性的一个典型例子。 ### P-H曲线 P-...
分形设计程序,一种简易的分形应用软件 在当今的创意产业中,设计师们不断寻求新颖的方法和工具来表达他们的创意,而分形设计程序正是应这一需求而生。作为一种创新的计算机应用软件,分形设计程序的设计理念是基于...
曼德勃罗集是最著名的分形之一,通过迭代复数运算来生成,其边界展现出无尽的细节和复杂性。而朱利亚集则依赖于不同的复数初始值,可以生成各种各样的图案。 分形动画则是分形技术在动态图形中的应用。通过改变分形...
学习者将学会如何编写简单的计算机程序,模拟这些算法,从而直观地感受分形的生成过程。 在课件中,还将讲解分形在自然科学和社会科学中的应用。在物理学中,分形用于研究物质的微观结构;在生物学中,它们可以帮助...
在华中科技大学的计算机图形学课程中,学生通过上机实验深入理解和掌握相关理论,其中一个实验主题是“分形三角形和三维场景绘制”。这个实验旨在让学生了解并实践分形几何和3D场景构建的基本原理。 分形三角形是一...
本示例通过创建一个最简单的分形图形来阐述递归的概念和实现方式。 分形,简单来说,是一种自相似的几何形状,即无论放大多少倍,局部细节都与整体保持相似性。在分形图形的绘制中,递归是核心思想,因为每个小部分...