利用递归的方式画出一系列漂亮而有规律的图形,在我看来是个既简单又复杂的事情。对于分析接触的不算很多,写得程序画出的图都有限。大神们想在我这篇博客里获得什么的话,估计不太可能。
Java的一点好处就是做界面比较容易,所以既然要画图形出来,有个界面可以显示还是很方便的。界面的构建比较容易,在界面上加一个按钮,最基础的工作就做完了。这篇博客我就是介绍一个我自己画的谢宾斯基三角形,也算是很基础的分形了。
新建一个监听器类,用来监听界面上的按钮是否被操作。按钮被按下的话就要画出类中所写的分形图案了。
//建一个类,继承动作监听器
public class DrawSanLis implements ActionListener{
//定义最初三角形的三个顶点
private int x1=250,y1=50,x2=50,y2=400,x3=450,y3=400;
//实现动作监听器自带的抽象方法
public void actionPerformed(ActionEvent e) {
dr.update(g);
//第一个三角形
g.drawLine(x1, y1, x2, y2);
g.drawLine(x1, y1, x3, y3);
g.drawLine(x2, y2, x3, y3);
//引用自己构造的DrawNext的方法,画出分形图案
DrawNext(x1,y1,x2, y2, x3, y3,6);
}
//构造一个向下递归的方法,a表示递归的次数
public void DrawNext(int x1,int y1,int x2,int y2,int x3,int y3,int a){
//先将三角形的三条边的中点连成一个三角形将大三角形分成四个小三角形下面会在三个小三角形中画出各自的递归
g.drawLine((x1+x2)/2, (y1+y2)/2, (x1+x3)/2, (y1+y3)/2);
g.drawLine((x1+x2)/2, (y1+y2)/2, (x2+x3)/2, (y2+y3)/2);
g.drawLine((x1+x3)/2, (y1+y3)/2, (x2+x3)/2, (y2+y3)/2);
//画一次三角形a就自减一次,再进入递归画图中
a--;
//如果在递归中a小于0,则中止画图
if(a<0){
return;
}else{//否则a大于0的时候一直画下去
DrawNext(x1,y1,(x1+x2)/2,(y1+y2)/2,(x1+x3)/2,(y1+y3)/2,a);
DrawNext((x1+x2)/2,(y1+y2)/2,x2,y2,(x2+x3)/2, (y2+y3)/2,a);
DrawNext(x3,y3, (x1+x3)/2, (y1+y3)/2,(x2+x3)/2,(y2+y3)/2,a); }
}
}
最后在这个监听器类中重载构造方法,将界面类和画布对象作为参数。则用监听器的时候,新建一个监听器对象引入监听器类中的构造方法,将监听器加到按钮上就可以实现整个分形图案的画出。
Graphics g1=this.getGraphics();
DrawSanLis dsl=new DrawSanLis(g1,this);
bu1.addActionListener(dsl);
分形确实是学习技术中的艺术品,它可以通过很多变化,变化出不同的图案。在学习中继续探究分形,是一件有难度但是快乐的事情。对于分形的认识还比较浅,还需要继续研究。
分享到:
相关推荐
"奇妙的递归"这一主题,揭示了分形图形的核心特性——递归构造。递归是数学和计算机科学中的一个重要概念,它通过重复一个过程来解决问题或生成结构,每次迭代通常将问题规模减小或简化。 Koch曲线,是由瑞典数学家...
在"分形算法与程序设计——Visual Basic实现"这个主题中,我们可以深入探讨以下几个重要的知识点: 1. **分形基础**:首先,我们需要理解分形的基本概念,包括曼德勃罗集、 Julia集、科赫雪花、谢尔宾斯基三角形等...
标题中的“递归出来的美丽分形世界”暗示了我们将探讨的是计算机图形学中一个迷人的概念——分形,以及如何通过递归算法来创建它们。递归是一种在编程中广泛使用的概念,它允许函数或过程调用自身来解决复杂问题。在...
他的著作,如《分形——形、机遇和维数》和《自然界中的分形几何学》,不仅促进了分形几何学的发展,也为艺术家和科学家提供了灵感,使他们能够探索和表达自然界的复杂美。分形几何学的出现,深化了我们对现实世界中...
分形(Fractal)是一种在数学、艺术和自然中广泛存在的几何形态,它具有自相似性和无穷细节。分形算法则是用于生成和分析这些复杂结构的数学方法。Visual Basic(VB)是一种流行的编程语言,特别适合初学者和快速...
在现代数学领域,分形几何作为20世纪数学的一个新兴分支,已经得到了广泛的应用。分形几何不仅在科研领域中占有...同时,分形几何的学习也有助于学生认识到数学与自然界、艺术等领域之间的联系,拓宽学生的知识视野。
分形(Fractal)是一种在数学、几何学和计算机科学中具有广泛应用的复杂形状或结构。它们具有自相似性,即在不同尺度上看起来...通过实践,你可以创造出令人惊叹的分形艺术作品,并在此过程中深化对Delphi编程的理解。
1. **递归算法**:在分形图的生成中,递归算法扮演了核心角色。通过定义一个基础形状,并重复应用自身来构建更复杂的结构。例如,曼德勃罗集就是通过复数平面上的迭代过程来生成的,每次迭代都是对前一次结果的简单...
在探讨计算机图形学领域中的一项重要分支——**分形几何**时,我们首先需要理解它所解决的问题背景及其核心概念。分形几何作为一种新兴的数学工具,旨在描述自然界中那些不规则且复杂的形状,这些形状无法通过传统的...
《OpenGL实现的分形山脉——探索计算机图形学的奇妙世界》 在计算机科学领域,特别是图形学中,分形是一个引人入胜的话题。分形以其独特的自相似性与无尽的细节,为数字艺术和模拟自然景观提供了无限可能。在本次的...
在本项目中,我们探索了如何使用流行的JavaScript库——Three.js来创建一个3D球体分形的示例。Three.js是一个强大的WebGL库,它允许开发者在浏览器中轻松地构建复杂的3D图形和动画。这个压缩包包含了完成这一任务的...
本课程针对零基础的学习者,旨在介绍如何利用Python进行基本的编程操作,并通过实际项目——分形树的绘制,深入理解编程概念。 分形树是一种在数学和艺术中常见的图形,它具有自相似性,即在不同尺度上重复自身的...
《分形世界——深入探索斯尔宾斯基三角垫片》 分形,这一源自数学的概念,已经在计算机图形学、艺术、自然科学等领域产生了深远影响。它揭示了自然界中看似无规律的复杂形状背后的规律性,展现出一种自相似的美学。...
在本实例058中,我们探讨的是计算机软件开发中的一个独特领域——使用源码来绘制艺术图案。这个“绘制艺术图案”的项目是商业源码的一个典型应用,它展示了编程如何与艺术创作相结合,创造出令人惊叹的视觉效果。...
递归树是递归思想在图形学中的应用,通常用于创建分形或模拟自然界中的复杂结构,如树木、山脉等。在这个场景中,我们讨论的是使用p5.js库在JavaScript中实现的递归树。 p5.js是一个开源的JavaScript库,它为艺术家...
本项目“playing-with-chaos-master”引领我们深入一个迷人的话题——混沌理论,通过JavaScript来可视化分形和奇怪的吸引子。这些概念不仅在数学和物理学中有深远的影响,而且在艺术和计算机图形学中也找到了独特的...
"trees"项目就是利用HTML5的一项重要特性——canvas元素,来实现动态生成分形树的艺术效果。分形是一种自相似的几何形态,在自然界中广泛存在,如树枝、雪花等,它们在数学和计算机图形学中有深远的影响。 canvas是...
"fractal_tree:使用SFML在C ++中编码一些分形树" 描述与标题一致,强调了项目的核心——用C++和SFML实现分形树的绘制。分形树的生成通常涉及递归算法,这些算法可以模拟自然中树木的复杂分支结构。 **标签解析:** ...
- 通过递归可以实现分形图形的绘制,如Sierpinski三角形。 6. **窗口控制**: - `turtle.window_width()` 和 `turtle.window_height()` 获取窗口大小。 - `turtle.setup(width, height, startx=None, starty=...