在我们这个美丽的世界,哪里都能够看到分型的影子,小到花草树木的花纹图案,大到宇宙万物。从大到小看来,它们都满足同样的规律,也就是迭代,用计算机的语言来说,这就是递归的内涵所在。
首次接触分形,就发现了它的魅力真的很大,一个对你来说似乎毫无意义的公式,通过用计算机根据这个公式不断迭代画上几十万个点后,竟然形成了想也想不到的美丽图形,如下图
如何画一个雪花曲线呢?对于新手来说,的确十分难。但彻底理解了递归的概念后,加上一点数学知识以及足够的耐心是能够画出来的,下面给出源代码及注释。
/************************************************************/
主界面
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中,通过利用Java AWT...
总之,这个项目为我们提供了一个用Java实现分形图像的实例,不仅展示了Java的图形处理能力,也让我们有机会学习到分形数学的美妙。通过阅读源码和运行提供的程序,我们可以更深入地理解分形的生成原理以及Java在图形...
100个实例”中,我们将会探讨如何使用Java、HTML和C语言来实现各种分形图案。 1. **Java分形设计**:Java作为一种强大的面向对象编程语言,提供了丰富的图形库,如Java AWT和Swing,使得创建分形图形变得容易。例如...
在本实例中,我们将深入探讨IFS算法及其在生成分形图像中的应用。 IFS的核心概念是通过一系列变换函数,将一个简单的初始形状逐渐迭代为更复杂的结构。这些变换可以包括缩放、旋转和平移等操作。每个函数都有一个...
这个Java源代码实例就是专注于分形几何的实现,特别适合初学者用来学习和实践。 在Java中,我们可以使用面向对象的特性来设计分形几何图形。通常,一个分形类会包含生成分形图形的主要逻辑,包括迭代过程和颜色设定...
在Java编程语言中,计算机图形学是一门涉及创建、操纵和显示二维或三维图形的学科。...通过学习和实践这些代码,你可以深入理解Java图形绘制的基本原理和技巧,并且可以作为进一步开发复杂图形应用程序的基础。
《基于JAVA的分形图像生成技术的研究》这篇论文主要探讨了如何使用JAVA语言来...这篇论文通过具体实例展示了JAVA在分形图像生成中的应用,不仅深化了对分形理论的理解,也为使用JAVA进行复杂图形处理提供了实践指导。
"fractals-2D"项目就是这样一个实例,它是一个用Java编写的简单程序,用于绘制各种二维分形图案。 首先,让我们深入了解一下什么是分形。分形是指那些在任意小的尺度上都保持其形态特征的几何对象。它们通常具有不...
总的来说,这个压缩包提供了一个用Java实现的递归分形树的完整实例,包括源代码、可执行文件和一个可能的展示页面。用户可以通过查看和修改源代码,深入理解分形算法和Java编程。同时,这也是一个很好的学习资源,有...
"雪花"则指向了具体的应用实例,展示了分形理论在模拟自然现象中的应用。 总的来说,这个压缩包提供了一个学习和探索分形算法的良好平台,无论是对计算机图形学感兴趣的初学者,还是寻求深化理论知识的专业人士,都...
为了使生成的分形植物具有交互性,本文还探讨了如何将VRML与Java相结合。具体步骤包括: - **定义L-系统规则**:首先定义一套L-系统的规则,包括起始字符串和产生式。 - **生成植物模型字符串**:基于定义好的规则...
综上所述,这个源码包提供了一个用递归方法绘制分形图的实例,对于理解递归编程、分形理论及其在商业环境中的应用具有实践价值。通过分析和学习这个源码,开发者可以增强自己的算法设计能力,同时也能欣赏到数学与...
Barnsley fern是一种分形图形,它的生成通常用到迭代算法,这对理解和掌握Java的控制结构和数学应用很有帮助。 2. **HwMouse.class, HwParameter.class, HwImage.class, HwAudio.class**:这些可能是课程作业或示例...
1. 递归分形法(深度优先搜索,DFS):这种方法基于树状结构,从一个起始点开始,随机选择一个未访问的相邻节点,然后标记为已访问,并继续这个过程,直到没有可选的相邻节点为止。回溯到上一个节点,重复这个过程,...
【Java Chaos Game噪声游戏】是一种利用随机性生成分形图像的算法,它基于数学上的混沌理论。在这个游戏中,通常以Sierpinski三角形为例,通过简单的规则来生成复杂的图形。下面将详细介绍这个概念以及提供的Java...
8. **递归**:某些复杂图形如分形可以使用递归函数来生成,海龟作图程序可以作为展示递归的一个生动实例。 通过学习和实践这个JAVA海龟作图程序,开发者不仅可以掌握JAVA语言的基本语法,还能理解图形编程的基本...
非线性系统手册 第五版:混沌,分形,元胞自动机,遗传算法,基因表达式编程,支持向量机,小波,隐马尔可夫模型,模糊逻辑与C++、JAVA和SymbolicC++程序 出版时间:2013年版 内容简介 《非线性系统手册(第5版)...
而本文所提出的基于Java3D的水稻形态可视化试验,为这类研究提供了一个具体实例。 综上所述,基于Java3D的水稻形态可视化试验不仅为水稻形态的三维可视化提供了有效的方法,也证明了Java3D在农业科学领域的应用潜力...
此外,这个实例还可能涉及数据结构和算法,比如递归、分形或图论的概念,这些都可能被用来创建复杂且美丽的几何图形。分形艺术,如曼德勃罗集,就是通过迭代计算和自相似性实现的,这种技术在计算机艺术中非常...