`
吃货吃货
  • 浏览: 33029 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

初识java——基础分形的实现

    博客分类:
  • java
 
阅读更多


      转眼间,大二的上半学期已经快过完了,虽然大二的课程有一点略忙,不过还是坚持学了一点java的~上次发的博客是一个java画图板的实现,不过实现的还是一些很简单的功能。比如说画一些很简单的图形,一条直线,一个矩形,一个立方体什么的。。。知道了这些,我们就可以利用递归和迭代来画一些更漂亮的图形。举个例子,大家都知道在画图板上画一个圆,可以用fillOval的方法,不过如何让我们画的圆看起来更像一个球呢,大家看

for(int i=0;i<256;i++){
                g.setColor(new Color(0,0,255-i));
	g.fillOval(200+i/2, 200+i/2, 255-i, 255-i);
				
	try{
		Thread.sleep(30);
	}catch(InterruptedException e1){

                }
				
}

 

   大家看,这样子是不是更像球呢,其实方法很简单,就是利用颜色变化的深浅,然后分形在一个一个圆的画,不过每一次画的时候将圆的半径减少一点,这样看起来就很像一个球咯。

 

   咳咳,接下来转入正题,首先大家来看一个由迭代方法实现的分形,具体的算法是这个样子x2=Math.sin(a*y1)-Math.cos(b*x1);y2=Math.sin(c*x1)-Math.cos(d*y1);a=-2;b=-2;c=-1.2;d=2;不过一开始画的时候,窗体上什么都没有,后来在大神的指导下才知道,原来x2,y2计算出来的结果是个负数,要将它们进行适当的放大,具体方法如下:

for(int i=0;i<100000;i++){
	//随机颜色?
	g.setColor(new Color(0,0,random.nextInt(256)));
	//绘制分形的方法,利用迭代绘制分形
	x2=Math.sin(a*y1)-Math.cos(b*x1);
	y2=Math.sin(c*x1)-Math.cos(d*y1);
	int srcX=(int) (100*x2+200);
	int srcY=(int) (100*y2+200);			
	g.drawLine(srcX, srcY, srcX, srcY);				x1=x2;
	y1=y2;
}

 

      虽然说这个分形是画了出来,不过感觉颜色的效果很不理想,要是能做出向霓虹灯一样的效果就完美了,可惜我不知道。。。大家知道的话可以私聊我啊

      接下来再是递归实现分形的实现大家首先来看这个例子,首先是递归实现分形的最简单的例子,废话不多说,大家看代码

public void draw1(double  x1,double  y1,double  x2,double  y2,int n){
	if(n<=0){
		return;
	}	
	g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);
	//得到新的点的坐标
	double  xx1 = x1;
	double  xx2 = x1+(x2-x1)/3;
	double  xx3 = x1 + 2*(x2 - x1)/3 ;
	double  xx4 = x2;
	double  yy1 = y1 + 20;
	double  yy2 = y2 + 20;
	double  yy3 = y1 + 20;
	double  yy4= y2 + 20;
	//递归调用
	draw1(xx1,yy1,xx2,yy2,n -1);//绘制左边的直线
	//递归调用
	draw1(xx3,yy3,xx4,yy4,n -1);//绘制右边的直线		
	}

 

     

 然后大家再看下个更高端的分形,好像是叫做谢尔宾斯基三角形:

public void draw3(int xa,int ya,int xb,int yb,int xc,int yc,int n){	
	if(n<=0){
		return;
	}
	//计算下一步要画的点的坐标
	int xxa=(xa+xb)/2;
	int yya=(ya+yb)/2;
	int xxb=(xb+xc)/2;
	int yyb=(yb+yc)/2;
	int xxc=(xc+xa)/2;
	int yyc=(yc+ya)/2;	
	g.drawLine(xxa, yya, xxb, yyb);
	g.drawLine(xxb, yyb, xxc, yyc);
	g.drawLine(xxc, yyc, xxa, yya);		
	draw3(xa,ya,xxa,yya,xxc,yyc,n-1);
	draw3(xb,yb,xxa,yya,xxb,yyb,n-1);
	draw3(xc,yc,xxc,yyc,xxb,yyb,n-1);
	
	}

 

      要是在给这个三角形加上一些随机颜色,并且给他一个死循环,这样这个三角形看起来就像是一直在闪,简直酷毙了

     最后一个就是科赫曲线,具体的算法就是:

L系统
字符 : F
常数 : +, −
公理 : F++F++F
规则: F → F−F++F−F
F :向前
- :左转60°
+ :右转60°
虽然这些都只是一些很基础的分形,但是我们还可以画出一些更加漂亮的、更有创意的分形,不过具体的算法就需要我们自己慢慢的去研究啦~加油
  • 大小: 15.2 KB
  • 大小: 120.8 KB
  • 大小: 5.9 KB
  • 大小: 36.5 KB
1
0
分享到:
评论

相关推荐

    MATLAB与数学教学——以分形几何为例.pdf

    分形几何不仅在科研领域中占有重要地位,而且已经开始逐渐渗透到初高中等基础教育阶段的教学中。分形几何的概念最早由美籍法国数学家Benoit B. Mandelbrot于20世纪70年代提出,并迅速成为全球科学家们热议的焦点。...

    Java实现的分形算法与程序设计

    ### Java实现的分形算法与程序设计 #### 分形算法概览 分形是一种复杂的几何形状,具有自相似性特点,即在不同尺度下都表现出相似的结构特征。这种特性使得分形在自然界中广泛存在,例如海岸线、山脉、云彩等自然...

    分形几何——数学基础及其应用

    ### 分形几何——数学基础及其应用 #### 一、引言 分形几何是一门研究不规则几何形状的数学分支,这些形状具有自相似性、分数维数等特性。本书《分形几何——数学基础及其应用》(第二版)由英国数学家Kenneth ...

    Java实现美丽的分形

    结合提供的标题"Java实现美丽的分形"和描述中的博客链接,我们可以推测这是一个关于利用Java创建分形图形的教程。 首先,我们需要理解分形的基本概念。分形是自然界中广泛存在的几何形状,如海岸线、云朵、雪花等。...

    分形算法与程序设计——Java实现

    本篇文章将深入探讨分形算法的基本原理,以及如何使用Java语言进行实现。 首先,我们来理解分形的基本概念。分形是由Benoit Mandelbrot提出的,其特征在于无论放大多少倍,局部细节总是保持着与整体相似的结构。...

    用Java实现的分形程序

    这个名为"用Java实现的分形程序"的项目,显然利用了Java编程语言来创建一个图形化程序,用于绘制美丽的分形图像。Java作为一种跨平台的编程语言,非常适合这种类型的应用,因为它提供了丰富的图形用户界面(GUI)库...

    分形算法与程序设计——Java实现(7)

    分形算法与程序设计——Java实现,这是其中的第七个程序。

    分形算法与程序设计——Visual Basic实现--光盘文件

    在"分形算法与程序设计——Visual Basic实现"这个主题中,我们可以深入探讨以下几个重要的知识点: 1. **分形基础**:首先,我们需要理解分形的基本概念,包括曼德勃罗集、 Julia集、科赫雪花、谢尔宾斯基三角形等...

    分形算法与程序设计——Visual Basic实现.rar

    通过这个"分形算法与程序设计——Visual Basic实现"的项目,你可以学习到如何利用VB编程实现分形算法,以及如何将理论知识转化为实际图形。这不仅锻炼了编程技能,也加深了对分形几何的理解。在实践中,你可以尝试...

    经典分形山(D-S)算法——Visual C++实现

    在孙博文的《分形算法与程序设计——Visual C++实现》一书中,作者详细讲解了如何将理论知识应用于实际编程中,包括分形山的生成和OpenGL的使用。通过阅读这本书,读者不仅可以理解D-S算法的工作原理,还能掌握实际...

    dla.rar_ dla_DLA_java 模型_分形 DLA

    通过这个Java实现的分形DLA模型,学习者不仅可以了解分形理论,还能接触到基本的图形绘制和随机算法,这对于计算机图形学和算法设计的学习都是非常有价值的。同时,这种模拟实验也鼓励探索和创新,比如改进算法以...

    分形算法JAVA实现

    2. **Java编程基础**:在Java中实现分形算法,首先需要掌握Java编程语言的基础,包括类、对象、接口、异常处理、文件I/O等。文件`readme_Java.txt`可能包含了关于如何在Java环境中配置和运行代码的说明。 3. **章节...

    Java图形分形实例源码.rar

    Java图形分形实例源码是基于Java编程语言实现的,用于展示几何图形的分形特性。分形是一种在数学和计算机科学中广泛研究的概念,它指的是具有自相似性且在不同尺度上重复出现的复杂形状。在Java中,通过利用Java AWT...

    分形算法与程序设计 源代码 java版本

    《分形算法与程序设计》是一本深入探讨分形理论并结合Java编程语言进行实践的书籍。本书通过详细的源代码示例,旨在帮助读者理解分形的数学原理,并学会利用Java进行分形图像的生成。分形是自然界中广泛存在的复杂...

    论文研究-基于XML和Java技术的分形图像处理与网络传输.pdf

    7. 分形算法:深入理解各种分形算法(如Koch曲线等)的原理和实现细节,是准确生成和处理分形图像的基础。 通过整合XML的描述能力和Java的编程灵活性,基于XML和Java技术的分形图像处理与网络传输方法能够大幅度...

    Java 分形几何图形源代码实例

    Java 分形几何图形源代码实例是一组用于演示和学习分形几何概念的编程资源,主要使用Java语言实现。分形几何是一种研究具有自相似性质的几何形状和结构的数学领域,它在计算机图形学、艺术、自然科学乃至金融等领域...

    分形算法与程序设计Java实现代码

    分形算法与程序设计——Java实现,此光盘收录的是《分形算法与程序设计java版》一书中所讲解的程序设计的源代码及部分供参考的效果图。具体内容和使用方法如下: 文件夹&lt;第2章JAVA&gt;包括: &lt;2_01&gt;:内含Cantor三分...

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

    通过阅读和分析源代码,学生可以深入理解底层工作原理,例如如何使用顶点缓冲区、索引缓冲区来高效地渲染三角形,以及如何实现分形算法来生成复杂的形状。 在“U201214852_何鲁丽”这个文件中,很可能是实验者...

    book2_1_1_计算物理基础_第二章_分形树_

    在本资源中,我们主要探讨的是计算物理的基础概念,特别是第二章的第一个主题——分形树。分形树是一种数学模型,它在物理学、几何学、生物学等多个领域都有广泛应用。理解分形树的基本原理和实现方法对于深入学习...

Global site tag (gtag.js) - Google Analytics