"一尺之锤、日取其半、万世不竭"这和分形几何的思想极为相似。
无论从美学的观点还是从科学的观点,许多人在第一次见到分形时都有新的感受。----曼德勃罗
在外形看来分形艺术似乎是魔术。但不会有任何数学家疏于了解他的结构和意义。
分形是自然界的几何学。我们看到了一些以前没有看到过得东西,它让我们用另一种眼光去看世界。
蜿蜒曲折的海岸线、起伏不定的山脉、粗糙不堪的断层、变换无常的浮云、九曲回肠的河流、纵横交错的血管、令人眼花缭乱的繁星,他们都那么的极不规则、极不光滑。粗略的说这些对象都是分形。分形几何据有自相似性、自仿射性。分形几何与欧式几何有着明显的区别:首先它是无规则的(不光滑的)、他是无限的、可以从局部看出整体、看上去复杂但结构相当简单、他的维数一般为分数
想了解分形几何可以去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.63、1.58、...
分形几何 教材 [分形几何——数学基础及其应用].(英国)Kenneth.Falconer-OCR
用非递归方法解决分形几何问题 用非递归方法解决分形几何问题 用非递归方法解决分形几何问题 用非递归方法解决分形几何问题
一本介绍分形几何的基础书籍,适合初学者,内容详细,
分形几何方面的基础理论书籍,需要用超星阅读器
Java 分形几何图形源代码实例 Java 分形几何图形源代码实例Java 分形几何图形源代码实例
分形曲线分形几何学之二-windfern.m 分形曲线 分形几何学之一: https://www.ilovematlab.cn/thread-88859-1-1.html 程序: lyapunovfractal2.m 结果: 1.gif ...
分形曲线分形几何学之二-newtongallery[1].zip 分形曲线 分形几何学之一: https://www.ilovematlab.cn/thread-88859-1-1.html 程序: lyapunovfractal2.m 结果: 1....
分形几何生成器
分形理论(Fractal Theory)是当今十分风靡和活跃的新理论、新学科。分形的概念是美籍数学家本华·曼德博(法语:Benoit B....分形理论的数学基础是分形几何学,即由分形几何衍生出分形信息、分形设计、分形艺术等应用
分形几何,CS海报分形几何,CS海报分形几何,CS海报分形几何,CS海报分形几何,CS海报
本书是分形几何的基础,目前分形几何已经在各个领域得到了广泛的应用,有数学家预言,分形几何是本世纪的数学领域的重要分支。本书内容详实,通俗易懂,适合广大科研人员学习。
这个是通过vc6.0运行出来的分形树,只是一个分形结构图,参考的是一本书上的代码,一根竹竿生长出两个侧干,实现的递归算法。。
分形几何简易教材 分形是一种具有自相似特性的现象、图象或者物理过程。也就是说,在分形中,每一组成部分都在特征上和整体相似,只仅仅是变小了一些而已。
分形树的生成算法 实现分形树的绘制 有参数输入窗口,通过该窗口输入生成树的各个参数:颜色,大小,旋转角度等等
此处结构的含义十分丰富,它不仅指研究对象的空间几何形态,而是一般地指其拓扑维数(几何维数)小于其测量维数的点集,如事件点的分布,能量点的分布,时间点的分布,过程点的分布,甚至可能是意识点、思维点的分布。
很多年前的一个例子了,分形,一个奇妙的世界。
有效的解决读者对于分形理论的模糊印象,通过大量的实例通透的讲解了分形几何的特征及性质。
分形几何的matlab代码的一个小栗子。上课的一个作业。