自然几何之分形(3)

                                                            ----递归分形算法                作者:周顺利

     由于分形图形具有自相似特性,所以,递归算法成了构造分形图形的必然选择的一种算法,下面就是一个构造分形树的递归算法。

递归分形树的基本算法:

1 设A点的坐标为(x,y),B点的坐标为(x0,y0),C点的坐标为(x1,y1),D点的坐标为(x2,y2),L为树干的长度,a为支干与主干的夹角
2 绘制主干AB,(x,y)--(x0,y0);
3 计算C点的坐标,L=2L/3,x1=x0+L*cos(a),y1=y0-L*sin(a);
4 计算D点的坐标,L=2L/3,x1=x0+L*cos(-a),y1=y0-L*sin(-a);
5 将步骤2中x0->x,y0->y,x1->x0,y1->y0,再绘制(x,y)--(x0,y0)直线,也即是画分支BC;
6 将步骤2中x0->x,y0->y,x2->x0,y2->y0,再绘制(x,y)--(x0,y0)直线,也即是画分支BD;
7 重复执行步骤3->6,直到完成递归次数。

下边是一个java的实现:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class tree1 extends Applet implements ActionListener
{
Dimension d;
Image buffer;
Graphics bufferg;
int level=8;                           //递归深度
double L=90.0;                         //初始长度
double t=45.0*(Math.PI/180.0);         //叉间角度
double T0=90.0*(Math.PI/180.0);        //主干的生长角度
double ratio_x=0.8;
double ratio_y=0.8;
double z=2.0/3.0;

public void actionPerformed(ActionEvent ae)
{
level=Integer.parseInt(ae.getActionCommand());
repaint();
}

public void update(Graphics g)
{
paint(g);
}

public void paint(Graphics g)
{
if(buffer==null)
{
bufferg=buffer.getGraphics();
}
init_screen();
g.drawImage(buffer,0,0,this);
write_node(g,level,L,T0,0,0);
}

public void init_screen()
{
bufferg.setColor(Color.white);
bufferg.fillRect(0,0,d.width,d.height);
}

public void write_node(Graphics g,int n,double l,double arg,int x,int y)
{
int xx,yy,i;
xx=(int)(l*Math.cos(arg)*ratio_x);
yy=(int)(l*Math.sin(arg)*ratio_y);
bufferg.setColor(Color.blue);
bufferg.drawLine(x+(int)(d.width*0.5),d.height-y,(x+xx)+(int)(d.width*0.5),d.height-(y+yy));
g.drawImage(buffer,0,0,this);
if(n>0)
{
write_node(g,n-1,l*z,(arg-t/2.0)+0.0*t/1.0,x+xx,y+yy);
write_node(g,n-1,l*z,(arg-t/2.0)+0.0*t/1.0,x+xx,y+yy);
}
}
}
将该applet嵌入一个网页,打开网页即可看到图形。

自然几何之分形(3)相关推荐

  1. 自然几何之分形(2)

                                         自然几何之分形(2)                                                      ...

  2. 自然几何之分形(1)

      自然几何之分形(1)                                                      ------引言 分形Java Applet源代码: import ...

  3. 走近分形与混沌(part9)--感性让人自然,理性让人智慧,理性和感性结合才能产生完美

    学习笔记 学习书目:<蝴蝶效应之谜:走近分形与混沌 >-张天蓉: 文章目录 分形与音乐 分形与艺术 分形与音乐 一般来说,人们不会否认艺术(如雕塑.建筑.绘画等)与数学的关系,因为它们需要 ...

  4. python 分型几何学_分形几何学_数学文化欣赏

    分形几何学_数学文化欣赏 11.2.1欧几里得几何的局限性 自公元前3世纪欧几里得几何基本形成至今已有2000多年.欧几里得几何的重要性可以从人类的文明史中得到证明.欧几里得几何主要是基于中小尺度上, ...

  5. 扎哈的绝唱:“六芒星”大兴机场的几何赏析

    来源:老何谈几何 作者:顾险峰 本文约6200字,建议阅读10分钟.本文从几何的角度介绍了被誉为"扎哈的绝唱"--大兴机场的构造. 伟大的数学和伟大的艺术精神实质是相通的,伟大的数 ...

  6. 分形蕨( fractal fern)

    今天再一次看Cleve B. Moler 的 Experiments with MATLAB,再一次受触动,人家是matlab的创办人, mathworks公 司的首席科学家兼董事长,曾在美国著名大学 ...

  7. (论文阅读笔记)OLE:正交低秩嵌入,即插即用的几何损失

    论文阅读笔记:OLE: Orthogonal Low-rank Embedding, A Plug and Play Geometric Loss for Deep Learning 摘要 简介 2 ...

  8. 18个分形图形的GIF动画演示

         这里提供18个几何线段分形的GIF动画图像.图形颜色是白色,背景色为黑色,使用最基本的黑与白以表现分形图形.对分形几何有兴趣的人可以看下.我在写程序时基本是参考<分形算法与程序设计_V ...

  9. 复杂科学2021年度精选:从诺贝尔奖到未来科学

    来源:集智编辑部 编者按: 俯仰一息辞旧念,晴空万里无闲云.2021年终于画上句点. 这一年,三位科学家因对理解复杂系统的开创性贡献而斩获诺贝尔物理学奖.诺奖既表彰了以地球气候系统为代表的复杂系统研究 ...

最新文章

  1. 搭建Docker私有仓库--自签名方式
  2. Httpwatch 工具介绍
  3. Android开源工具库
  4. 开发时对业务技术框架的理解
  5. android digest 认证,探究 Android 签名机制和原理
  6. java getidentifier_android – 如何使用getResource.getIdentifier()获取布局?
  7. WSFC CLUSDB
  8. 英国野生生物摄影奖之一个地球奖
  9. python 设计模式之组合模式Composite Pattern
  10. Go语言中的字符和字符串
  11. 教你彻底禁止暴风影音后门进程自己启动
  12. win7开启不了Aero
  13. 【HTTP协议】---HTTP协议详解
  14. 用android实现GB28181前端设备接入平台
  15. sizeof运算符来获取各种数据类型在内存中所占字节数--gyy整理
  16. itools3.0服务器维护,iTools3.0微信管理功能更新 可支持语音信息
  17. Adjust接入注意事项
  18. 淘宝电商创业可能会面临哪些问题?
  19. 干货:服务器网卡组技术原理与实践
  20. 273222-06-3,(2S,4R)-Boc-4-amino-1-Fmoc-pyrrolidine-2-carboxylic acid,(2S,4R)-Fmoc-4-叔丁氧羰基氨基吡咯烷-2-甲酸

热门文章

  1. 领域建模的思想和方法 1
  2. 寻找连通域C++程序复现(个人C++学习记录)
  3. iOS原生App与H5页面交互 离线缓存 笔记
  4. 52ABP显示报错详情
  5. 每个苹果0.8元,第一天买两个苹果,第二天开始,每天买前一天的2倍,直至购买的苹果个数达到不超过100的最大值,编写程序求每天平均花费多少钱?
  6. 计算机删除网络对象,恢复故障转移群集中已删除的计算机对象 - Windows Server | Microsoft Docs...
  7. 一个中文字符对应几个字节?
  8. 【KingbaseES】如何查看数据库版本号
  9. 重聚--SDUTACM十周年庆典专场赛 (部分题解)
  10. HTTPie的安装及使用