L-System分形
部分与整体以某种形式相似的形,称为分形。即部分以相同的函数、不同某些变量,以某中确定的规则不断迭代或递归所画出整体的图形。
下面是分形的几个经典例子。
※※神奇的色子※※
1.平面上随机选A,B,C三个点。再随机选一个点,记为P。
2.有一个三面色子,每丢一次,则选中ABC三个中一点。
开始游戏:
1.重复丢色子,如果选中A,则取A和P的中点P1,画黑,
2.如果选中B,则取B和P1的中点P2,画黑
3.如果选中A,则取A和P2的中点P3,画黑
4….一直重复(如每点一下鼠标,丢10000次色子。
思路:为画图面板添加鼠标监听器方法,在鼠标释放的时候获取坐标值。收集上诉四个点的坐标值,其中前三个点分别为A,B,C,第四点位P。以一个0到2的随机数来确定A,B,C选中的点。每次计算选中点和P的中中点,以该中点替代P点。迭代。
public void mouseReleased(MouseEvent e) { if(djf.buttonText().equals("色子")){ if(count==0){//第一次释放鼠标时获得A点坐标 x1=e.getX(); y1=e.getY(); count++; }else if(count==1){//第二次释放鼠标时获得B点坐标 x2=e.getX(); y2=e.getY(); count++; }else if(count==2){//第三次释放鼠标时获得C点坐标 x3=e.getX(); y3=e.getY(); count++; }else if(count==3){//第四次释放鼠标时获得P点坐标 xp=e.getX(); yp=e.getY(); for(int i=0;i<100000;i++){//迭代100000次 Random r=new Random(); int n=r.nextInt(3); switch(n){ case 0://选中A点 xp=(x1+xp)/2; yp=(y1+yp)/2;//取AP中点,替代P点 g.setColor(new Color(yp/3,yp/4,yp/64)); g.drawLine(xp, yp, xp, yp);//画出该点 break; case 1://选中B点 xp=(x2+xp)/2; yp=(y2+yp)/2;//取BP中点,替代P点 g.setColor(new Color(yp/3,yp/4,yp/64)); g.drawLine(xp, yp, xp, yp);//画出该点 break; case 2://选中C点 xp=(x3+xp)/2; yp=(y3+yp)/2;//取CP中点,替代P点 g.setColor(new Color(yp/3,yp/4,yp/64)); g.drawLine(xp, yp, xp, yp);//画出该点 break; } } count++; }else if(count==4){ x1=y1=0; x2=y2=0; x3=y3=0; count=0; } }
效果图如下:
※※美丽的窗花※※
迭代函数如下:(注意:sign为符号函数)
X(n+1)=Y(n)-sign(X(n))|bX(n)-c|^(1/2)
其中:a=1,b=4,c=60
public void chuanghua(){ x=x1; y=y1; double x2; double y2; double a=1; double b=4; double c=60; for(int j=0;j<2000000;j++){ x2=y-Math.signum(x)*Math.sqrt(Math.abs(b*x-c)); y2=a-x; x=x2; y=y2; if(j%3==0){ g.setColor(Color.red); } if(j%3==1){ g.setColor( Color.green); } if(j%3==2){ g.setColor( Color.blue); } g.drawLine((int)(x)+300,(int) (y)+250,(int)(x)+300,(int) (y)+250); } } }
效果图如下:
若把系数稍作修改,则得到如下截然不同的图形:
double a=0.4;
double b=1;
double c=0;
※※逼真的树叶※※
熊哥推荐的站点:http://paulbourke.net/fractals/
http://paulbourke.net/fractals/ifs_fern_a/
好多图形都有迭代公式。比如:
以下是系数的选取。共有四组,每组取到的概率不相等,分别为0.01,0.07,0.07,0.85。以一个0到99的随机数指示取到的组别。
public void shuye(){ double a,b,c,d,ee,f; double x5,y5,x52=0,y52=0; for(int i=0;i<200000;i++){ Random rr=new Random(); int r=rr.nextInt(100); if (r==0){ a=0; b=0; c=0; d=0.16; ee=0; f=0; }else if (r>=1&&r<=7) { a=0.2; b=-0.26; c=0.23; d=0.22; ee=0; f=1.6; }else if (r>=8 && r<=14) { a=-0.15; b=0.28; c=0.26; d=0.24; ee=0; f=0.44; }else{ a=0.85; b=0.04; c=-0.04; d=0.85; ee=0; f=1.6; } x5=a*x52+b*y52+ee; y5=c*x52+d*y52+f; int tempx=-(int)(x5*50)+300; int tempy=-(int)(y5*50)+550; g.setColor(new Color(20,i/(200000/255),20)); g.drawLine(tempx,tempy,tempx,tempy); x52=x5; y52=y5; } }
效果图如下:
相关推荐
根据W-M的分形函数,生成W-M函数的曲线,请批评指教。
# 构建L-system分形树 ## 一、基本概念### 1、L-system Lindenmayer系统,简称L系统,是由荷兰乌特勒支大学的生物学和植物学家,匈牙利裔的林登麦伊尔(Aristid Lindenmayer)于1968年提出的有关生长发展中的...
基于Matlab复合材料磨损表面形貌W-M分形模型及其模拟的研究涉及到多个专业知识点,包括复合材料磨损表面形貌、W-M分形模型、Matlab编程、分形维数的计算方法以及无标度区的分析等。本文将对这些知识点进行详细阐述。...
《L-System 3.1:探索模型世界的神奇工具》 L-System,全称是“Lindenmayer System”,是一...无论你是生物学家、计算机科学家、艺术家还是对分形几何感兴趣的业余爱好者,L-System 3.1都能为你带来无尽的乐趣和启示。
标题中的“MATLAB_Maragaos-Sun分形维数”指的是使用MATLAB软件进行的一次毕业设计项目,其中涉及到的是Maragaos-Sun分形的维数计算。MATLAB是一种广泛应用于数值计算、数据分析和算法开发的编程环境,特别适合处理...
### 分形初论——分形的初步介绍 #### 一、引言 分形是一种复杂的几何形状或图案,它在各个尺度上都表现出自相似的性质。这种自相似性不仅体现在数学模型上,而且广泛存在于自然界和社会现象之中。本文旨在通过对...
在本项目中,我们主要探讨的是利用Matlab对复合材料磨损表面形貌进行建模和模拟,具体采用了W-M分形模型。W-M分形,全称为Wallace-Mandelbrot分形,是一种广泛应用于复杂几何形状分析和描述的数学工具,尤其在材料...
分形,这个概念源于20世纪70年代,由数学家曼德勃罗提出,它是一种具有自相似性、无标度性和复杂性的几何形态。本分形基础课件是为初学者精心设计的,旨在深入浅出地介绍分形理论,帮助学习者建立起对分形的全面认识...
- `Lsystem` 类:负责根据输入的规则执行相应的绘图操作。 #### 三、代码细节分析 1. **主函数部分**: - 首先定义了一些变量,如角度、迭代次数、画笔宽度和线段长度。 - 接着读取用户输入的规则、迭代次数等...
Terdragon分形是分形天线的一种,其设计方式是在笛卡尔坐标系中恰当放置曲线,利用曲线的自相似性质进行迭代设计。通过迭代算法,能够快速计算出天线阵列的辐射方向图。仿真结果显示,Terdragon及Terdragon-6分形...
论文研究-多分形波动率测度的VaR计算模型.pdf, 以上证综指长达6年时间的5分钟高频数据为实证样本,首先提出了一种基于多分形谱(Multifractalspectrum)分析的市场波动率...
void draw(LSystem lSystem, int iterations) { String currentString = lSystem.getAxiom(); for (int i = 0; i ; i++) { currentString = lSystem.applyRules(currentString); } for (char c : current...
JavaScript应用实例-二叉树分形图.js
JavaScript应用实例-经典分形图案Mandelbrot.js
论文研究-基于分形视角下的沪港股市投资组合策略.pdf, 针对已有研究的不足,为满足不同交易周期投资者的实际需求,将分形研究方法与传统投资组合模型相结合,考虑多时间...
AutoJs源码-二叉树分形图。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!...
东南大学 计算机图形学 作业一 分形算法,opengl实现!!
看的见的算法 7个经典应用诠释算法精髓(8)-分形图的绘制:计算机生成艺术 09-Fractal-Drawing 9-1 分形到底是什么鬼.mp4 9-2 递归绘制基础-.mp4 9-3 Vicsek分形图的绘制.mp4 9-4 为分形绘制添加交互.mp4 9-5 ...
AutoJs源码-经典分形图案Mandelbrot。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您...