`
javaflex
  • 浏览: 80455 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

分形几何 之 美妙的树 把递归用到极致

阅读更多

"一尺之锤、日取其半、万世不竭"这和分形几何的思想极为相似。

无论从美学的观点还是从科学的观点,许多人在第一次见到分形时都有新的感受。----曼德勃罗

在外形看来分形艺术似乎是魔术。但不会有任何数学家疏于了解他的结构和意义。

分形是自然界的几何学。我们看到了一些以前没有看到过得东西,它让我们用另一种眼光去看世界。

蜿蜒曲折的海岸线、起伏不定的山脉、粗糙不堪的断层、变换无常的浮云、九曲回肠的河流、纵横交错的血管、令人眼花缭乱的繁星,他们都那么的极不规则、极不光滑。粗略的说这些对象都是分形。分形几何据有自相似性、自仿射性。分形几何与欧式几何有着明显的区别:首先它是无规则的(不光滑的)、他是无限的、可以从局部看出整体、看上去复杂但结构相当简单、他的维数一般为分数

 

想了解分形几何可以去baidu百科找http://baike.baidu.com/view/44498.htm

下面我就以递归的思想,采用java语言画一树叶

截图看一下:



 

 

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
/**
 * 
 * @author http://javaflex.iteye.com/
 *
 */
public class GraphicsTest extends JFrame implements ActionListener {
	public static final double PI = Math.PI / 180;
	JPanel panel;
	JPanel pnlCtl;
	JButton button;
	JButton button2;
	Graphics2D g2;

	public GraphicsTest(String string) {
		super(string);
	}

	public void init() {
		panel = new JPanel();
		pnlCtl = new JPanel();
		button = new JButton("分形树");
		button2 = new JButton("清除");
		this.add(panel, BorderLayout.CENTER);
		button.addActionListener(this);
		button2.addActionListener(this);
		pnlCtl.add(button);
		pnlCtl.add(button2);
		this.add(pnlCtl, BorderLayout.NORTH);
		setSize(800, 600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		Dimension winSize = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation((winSize.width - this.getWidth()) / 2,
				(winSize.height - this.getHeight()) / 2);
		g2 = (Graphics2D) panel.getGraphics();
	}

	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException,
			UnsupportedLookAndFeelException {
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		GraphicsTest testPanel = new GraphicsTest("分形树:QQ:三2824七676");
		testPanel.init();
	}

	
	@Override
	public void actionPerformed(ActionEvent e) {
		if ("分形树".equals(e.getActionCommand())) {
			drawLeaf(g2, 400, 500, 100, 210+random.nextInt(100));
		} else if ("清除".equals(e.getActionCommand())) {
			panel.getGraphics().clearRect(0, 0, 800, 800);
		}
	}
	Random random=new Random();
	public void  drawLeaf(Graphics g, double x, double y, double L, double a) {
		//random=new Random();
		//可以方面速度画以了解其算法
//		try {
//			Thread.sleep(1000);
//		} catch (InterruptedException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		int red = random.nextInt(127);
		int green = random.nextInt(127);
		int blue = random.nextInt(127);
//随机颜色
		g.setColor(new Color(red, green, blue));
		double x1, x2, x1L, x2L, x2R, x1R, y1, y2, y1L, y2L, y2R, y1R;
		float deflection = 50-random.nextInt(20);//侧干主干的夹角
		float intersection = random.nextInt(40)-20;//主干偏转角度
		float depth = 2+random.nextInt(2);//限制递归深度
		float ratio = 3f;//主干侧干长度比(可调整使其更茂密或稀疏)
		float ratio2 = 1.2f;//上级主干与本级主干长度比(可调整使其变高低)
		if (L > depth) {
			x2=x+L*Math.cos(a*PI);
			y2=y+L*Math.sin(a*PI);
			x2R=x2+L/ratio*Math.cos((a+deflection)*PI);
			y2R=y2+L/ratio*Math.sin((a+deflection)*PI);
			x2L=x2+L/ratio*Math.cos((a-deflection)*PI);
			y2L=y2+L/ratio*Math.sin((a-deflection)*PI);
			x1=x+L/ratio*Math.cos(a*PI);
			y1=y+L/ratio*Math.sin(a*PI);
			x1L=x1+L/ratio*Math.cos((a-deflection)*PI);
			y1L=y1+L/ratio*Math.sin((a-deflection)*PI);
			x1R=x1+L/ratio*Math.cos((a+deflection)*PI);
			y1R=y1+L/ratio*Math.sin((a+deflection)*PI);
			g.drawLine((int)x,(int)y,(int)x2,(int)y2);
			g.drawLine((int)x2,(int)y2,(int)x2R,(int)y2R);
			g.drawLine((int)x2,(int)y2,(int)x2L,(int)y2L);
			g.drawLine((int)x1,(int)y1,(int)x1L,(int)y1L);			g.drawLine((int)x1,(int)y1,(int)x1R,(int)y1R);
			drawLeaf(g,x2,y2,L/ratio2,a+intersection);
			drawLeaf(g,x2R,y2R,L/ratio,a+deflection);
			drawLeaf(g,x2L,y2L,L/ratio,a-deflection);
			drawLeaf(g,x1L,y1L,L/ratio,a-deflection);
			drawLeaf(g,x1R,y1R,L/ratio,a+deflection);
		}
	}
}
 



希望对大家有所帮助,特别是对分形几何感兴趣的朋友,希望可以进一步交流

  • 大小: 96.4 KB
  • 大小: 185.9 KB
  • 大小: 183.6 KB
  • 大小: 232.9 KB
0
0
分享到:
评论
2 楼 javaflex 2011-11-19  
deepnighttwo 写道
http://code.google.com/p/juliasetcreator/

自己写的一个Julia分形生成器。

不错,需要认真学习
1 楼 deepnighttwo 2011-11-19  
http://code.google.com/p/juliasetcreator/

自己写的一个Julia分形生成器。

相关推荐

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

    《分形几何——数学基础及其应用》是一本系统介绍分形几何理论与应用的经典之作。该书内容丰富、论述深刻,既适合初学者入门,也是研究人员不可或缺的参考书。通过本书的学习,不仅可以掌握分形几何的基本理论,还能...

    分形几何学(教程).pdf

    分形几何学是一门以不规则几何形态为研究对象的几何学。相对于传统几何学的研究对象为整数维数,如,零维的点、一维的线、二维的面、三维的立体乃至四维的时空。分形几何学的研究对象为非负实数维数,如0.63、1.58、...

    分形几何-分形树源代码

    分形树是分形几何中的一个经典例子,模拟了自然界中树木的形态。在这个项目中,我们将探讨如何通过编程实现分形树的生成,以及相关的技术细节。 分形树的生成算法通常基于迭代过程。首先,我们从一个简单的线条或...

    分形几何学1

    分形几何学是一种数学理论,它专注于研究那些不规则、具有自相似性的几何形状和模式。这个领域由法国数学家曼德勃罗特提出并发展,他的工作在20世纪70年代引领了这一新兴学科的诞生。曼德勃罗特集是分形几何学中的一...

    分形递归算法实现分叉树

    这种算法的美妙之处在于,通过简单的规则和迭代过程,可以生成极其复杂的结构。分形递归算法不仅在艺术和视觉效果上具有吸引力,也对理解自然界中复杂系统的生长和演化过程有着重要的启示作用。 在压缩包文件"2_13...

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

    分形几何,这一概念由法国数学家本华·曼德勃罗在20世纪70年代提出,是一种描述自然界中不规则、自相似结构的数学工具。它打破了传统欧几里得几何的规则形状,如直线、圆和正多边形,转而研究那些具有无限细节、在...

    分形几何简易教材 简易教材

    ### 分形几何简易教材知识点详解 #### 一、分形的概念与特性 **定义与特点:** 分形是一种具有自相似特性的现象、图像或物理过程。其最显著的特点是每一部分都与整体相似,只是在尺度上有所变化。这种自相似性不仅...

    分形几何的例子

    分形几何的探索是一个无限深入的过程,它让我们重新审视周围的世界,揭示出隐藏在平凡之下的美丽和秩序。通过深入学习和理解分形,我们可以更好地理解和模拟自然界的复杂现象,同时也为科学、技术乃至艺术创作带来了...

    分形几何学,详尽的介绍了分形几何学

    一本介绍分形几何的基础书籍,适合初学者,内容详细,

    分形几何_数学基础及其应用_(英)Kenneth.Falconer

    有效的解决读者对于分形理论的模糊印象,通过大量的实例通透的讲解了分形几何的特征及性质。

    分形曲线分形几何学之二-windfern.m

    分形曲线分形几何学之二-windfern.m 分形曲线 分形几何学之一: https://www.ilovematlab.cn/thread-88859-1-1.html 程序: lyapunovfractal2.m 结果: 1.gif ...

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

    1. 曼德勃罗集合:这是最著名的分形之一,由法国数学家本华·曼德勃罗提出。它的生成算法基于一个简单的复数迭代公式:\( Z_{n+1} = Z_n^2 + C \),其中\( C \)是复数常数,\( Z_n \)是迭代过程中的复数值。如果这个...

    分形曲线分形几何学之二-newtongallery[1].zip

    分形曲线分形几何学之二-newtongallery[1].zip 分形曲线 分形几何学之一: https://www.ilovematlab.cn/thread-88859-1-1.html 程序: lyapunovfractal2.m 结果: 1....

    分形几何生成器

    **分形几何生成器**是一种基于计算机程序的艺术与科学工具,它主要用于创建具有复杂细节和无限自相似性的图像。在本项目中,我们看到几个关键的文件,它们共同构成了一个分形几何的生成系统。 首先,`Mandbl.bpr`是...

    分形几何数学基础

    分形理论(Fractal Theory)是当今十分风靡和活跃的新理论、新学科。分形的概念是美籍数学家本华·曼德博(法语:Benoit B....分形理论的数学基础是分形几何学,即由分形几何衍生出分形信息、分形设计、分形艺术等应用

    tree_python_分形树叶_分形树_

    分形是一种自相似的几何形状,在自然界中广泛存在,比如树叶、山脉和云朵。分形树就是一种利用分形理论绘制的树形图案,它通过迭代过程模拟自然树木的分支结构。 首先,我们要了解turtle模块。turtle是Python内置的...

    分形几何,CS海报

    分形几何,这一独特而富有魅力的数学领域,与计算机科学(CS)有着深厚的联系,尤其是在图像处理和数据可视化方面。分形,源自希腊词"fractal",意为“碎片”或“分支”,它是一种具有自相似性的几何形态,无论在...

    递归分形树源码

    **递归分形树源码解析** 分形树是一种基于分形几何理论的图形,它通过重复应用相同或相似的规则来创建具有自相似性的树形结构。在计算机图形学中,递归算法常用于实现分形树的生成,因为它能够以简洁的方式描述复杂...

    rukceprogramstrong.rar_分形几何

    "rightF.m"可能表示一个名为"rightF"的MATLAB函数,这个名字暗示了它可能与分形几何中的右侧运算或递归关系有关,因为在分形生成中,常常会用到递归函数来定义每个部分如何根据整体规则生成。 "stepRK.m"可能是实现...

Global site tag (gtag.js) - Google Analytics