在我们这个美丽的世界,哪里都能够看到分型的影子,小到花草树木的花纹图案,大到宇宙万物。从大到小看来,它们都满足同样的规律,也就是迭代,用计算机的语言来说,这就是递归的内涵所在。
首次接触分形,就发现了它的魅力真的很大,一个对你来说似乎毫无意义的公式,通过用计算机根据这个公式不断迭代画上几十万个点后,竟然形成了想也想不到的美丽图形,如下图
如何画一个雪花曲线呢?对于新手来说,的确十分难。但彻底理解了递归的概念后,加上一点数学知识以及足够的耐心是能够画出来的,下面给出源代码及注释。
/************************************************************/
主界面
package cn.test0313;
import java.awt.Graphics;
import javax.swing.JFrame;
import cn.test0320.XueHua;
///新建一个类继承了JFrame
public class XieEr extends JFrame{
/**
* @兰天
*/
public static void main(String[] args) {
XieEr jf=new XieEr();
jf.init();
}
public int l=300,i=5;
private Graphics g;
public void init(){
this.setSize(800,700);
this.setTitle("雪花曲线");
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
//设置可见后获取画布
this.setVisible(true);
g=this.getGraphics();
}
//将画雪花曲线定义在重绘中
public void paint(Graphics g){
super.paint(g);
XueHua xh=new XueHua(g);
xh.init(l, i,100,200);
}
/**************************************************************/
//画雪花曲线的类
/****************************************************************/
package cn.test0313;
import java.awt.Graphics;
public class XueHua {
/**
* @兰天
*/
private int l,i;
//角度v
private Graphics g;
//一个三的N次方的数组
public int[] a=new int[]{1,3,9,27,81,243,729,2187};
//构造函数,传入画板
public XueHua(Graphics g){
this.g=g;
}
public void init(int l,int i,int x,int y){
this.l=l;
this.i=i;
//将雪花曲线的三角形的三边分别进行递归
this.xuehua(x, y, 0, 1);
this.xuehua(x+l, y, 2*Math.PI/3, 1);
this.xuehua(x+l/2, y+l*Math.sin(Math.PI/3), -2*Math.PI/3, 1);
}
//将利用这个函数进行递归,x,y起始点坐标,z角度 ,n用来判断到递归底层画曲线的长度
public void xuehua(double x,double y,double z,int n){
if (n<a[i]){
int i;
//第一次递归
xuehua(x,y,z,3*n);
//计算第二个点坐标
double x2=x+l*Math.cos(z)/(3*n),y2=y+l*Math.sin(z)/(3*n);
//改变角度
z=z-Math.PI/3;
xuehua(x2,y2,z,3*n);
//计算第三个点坐标
double x3=x2+l*Math.cos(z)/(3*n),y3=y2+l*Math.sin(z)/(3*n);
//改变角度
z=z+2*Math.PI/3;
xuehua(x3,y3,z,3*n);
double x4=x3-l*Math.cos(Math.PI-z)/(3*n),y4=y3+l*Math.sin(z)/(3*n);
z=z-Math.PI/3;
xuehua(x4,y4,z,3*n);
}else{
//若已经到了底层则画线
g.drawLine((int)x, (int)y, (int)(x+l*Math.cos(z)/(n)), (int)(y+l*Math.sin(z)/(n)));
}
}
}
/*************************************************/
雪花曲线的代码就这么多,如果想更多地了解下分形,我们可以是着将每回转过的角度改变,看会发生什么样的事。。。也可以将界面优化。。。实现渐变等
- 大小: 52.9 KB
- 大小: 19.1 KB
- 大小: 5.6 KB
- 大小: 5.6 KB
分享到:
相关推荐
Java 分形几何图形源代码实例 Java 分形几何图形源代码实例Java 分形几何图形源代码实例
Java图形分形实例源码,几何图形分形的例子,示例演示如截图所示,貌似有点难度,不懂,分享给Java达人。
看过这份课件,相信你会对分形有个比较全面的了解,为你以后的学习打下坚实的基础,很好的课件
VB Directx三维随机分形地形源码实例,上面的天空还有云彩动态效果,也是相当不错的,主要是使用递归算法生成复杂图像,你的编译环境需要装有Directx8 及以上版本才可以,可作为一个小型3D游戏的渲染模块。
分形设计—java,html,c。100个实例.经典实例,可直接用于学习以及课程设计,毕业设计。
分形算法与程序设计——Java实现 分形算法与程序设计——Java实现
分形算及其如何进行程序设计,用Java来实现的
绘制一个简单的分形树: 如下图所示,先垂直绘制一根线段,然后在线段长度的三分之一处和三分之二处分别以固定夹角绘制另外两根线段,长度分别为原线段的2/3. 如此反复,直至线段长度小于某个较小的值。其中,线条...
NULL 博文链接:https://1975417219.iteye.com/blog/1982701
分形算法与程序设计——Java实现,此光盘收录的是《分形算法与程序设计java版》一书中所讲解的程序设计的源代码及部分供参考的效果图。具体内容和使用方法如下: 文件夹<第2章JAVA>包括: <2_01>:内含Cantor三分...
分形几何 教材 [分形几何——数学基础及其应用].(英国)Kenneth.Falconer-OCR
VC分形源代码,多个实例给对分形感兴趣的朋友,很好很详细。
分形应用中的数学基础与方法 分形应用中的数学基础与方法 分形应用中的数学基础与方法 分形应用中的数学基础与方法 分形应用中的数学基础与方法 分形应用中的数学基础与方法 分形应用中的数学基础与方法 分形应用中...
各种分形算法,用JAVA语言编写的分形是一个几何概念,是非线性领域的一个分枝学科,描绘不光滑和不规则的几何形体,它使传统数学中无法表达的形态得以逼真的表达。自从1975年曼彻斯特首次提出分形理论以来,分形得到...
分形理论(Fractal Theory)是当今十分风靡和活跃的新理论、新学科。分形的概念是美籍数学家本华·曼德博(法语:Benoit B....分形理论的数学基础是分形几何学,即由分形几何衍生出分形信息、分形设计、分形艺术等应用
基于Matlab的混沌和分形的几个实例,都是从网上搜集而来。
分形几何方面的基础理论书籍,需要用超星阅读器
《分形算法与程序设计》一书的java代码,对研究分形的同志有用
分形android实例
介绍了分形概念,从科学与艺术相结合的角度尝试分析了分形图形艺术的意义和前景。更为重要的是,作者详细讲述了制作精美分形的技巧,并给出了大量源程序。作者的用意就是推广普及分形艺术,使更多的读者在最短的时间...