学了一段时间的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);
这样就完成了这个分形的基本图形,它有一个很洋气的学名——谢宾斯基三角形。
相关推荐
标题中的“递归出来的美丽分形世界”暗示了我们将探讨的是计算机图形学中一个迷人的概念——分形,以及如何通过递归...通过学习和理解谢宾斯基三角的生成过程,不仅能够提升编程技能,还能领略到数学和艺术的交融之美。
在MATLAB环境中,"sierpinski triangle"(西尔宾斯基三角形)是一种常见的分形几何图形。分形是那些具有自相似性且在不同尺度上重复出现的数学对象,Sierpinski三角形正是这类图形的一个经典例子。本项目着重于利用...
总之,分形世界是一个充满奇迹的领域,斯尔宾斯基三角垫片作为其代表之一,展示了数学的无穷魅力。通过深入理解和应用分形理论,我们可以更好地理解和模拟自然现象,同时也为计算机科学与艺术创新开辟新的道路。无论...
这里的代码可能是对锡尔宾斯基三角形的变体,如五边形(pentagram)或六边形(hexagon)的分形构造。 3. **3D图形与可视化**: `fern3D.m`文件名提示了3D图形的生成,这可能表示项目不仅仅是二维图像分析,还可能...
在探究谢宾斯基三角形时,我们需要找出其中着色三角形数量所构成的数列的通项公式,这不仅需要观察数列的规律,还需要归纳和总结,从而推导出数列的通项公式。 在没有直接给出通项公式的情况下,学习者可以通过观察...
22. **希尔宾斯基三角形**:希尔宾斯基三角形是一种分形结构,其着色三角形个数遵循特定的递推关系,可以构建通项公式。 23. **图形构造**:按照给定的规律,继续画出图形,同时统计图形中单位正方形的数量。 以上...
23. **希尔宾斯基三角形**:希尔宾斯基三角形是一种分形,着色方案遵循一定的递归规则,通过这个规则可以找出着色三角形个数的通项公式。 24. **图形中单位正方形的个数**:分析图形中单位正方形的数量变化,找出...