分形造型的常用模型

  • 随机插值模型
  • 迭代函数系统(IFS)
  • L系统

随机插值模型

该模型是1982年由Alain Fournier, DonFussell和Loren Carpenter提出的,它能有效地模拟海岸线和山等自然景象。
为了克服传统模型技术中依赖观察距离的局限性,随机插值模型不是事先决定各种图素和尺度,而是用一个随机过程的采样路径作为构造模型的手段。例如,构造二维海岸线的模型可以

  • 选择控制大致形状的若干初始点;
  • 在相邻两点构成的线段上取其中点,并沿垂直连线方向随机偏移一个距离;
  • 再将偏移后的点与该线段两端点分别连成两条线段。

这样下去可得到一条曲折的有无穷细节回归的海岸线,其曲折程度由随机偏移量控制。它也决定了分数维的大小:
图一

在三维情况下可通过类似过程构造山的模型,一般通过多边形(简单的如三角形)细分的方法。可以在一个三角形的3条边上随机各取一点,并沿垂直方向偏移一定距离后得到新的3个点,再连接成4个三角形,如此继续,即可形成褶皱的山峰。山的褶皱程度由分数维控制:
图二

下面以画出Sierpinski三角形举例

步骤
a.给三角形的3个顶点,和一个当前点;
b.随机选择三角形的某一个顶点,计算出它与当前点的中点位置;
c.将计算出的中点做为当前点,再重新执行操作a。

#include<stdio.h>
#include<time.h>
#include<math.h>
#include<graphics.h>#define PI 3.14159265int max_iter=10000;//迭代次数 double point[3][2]={0,100*tan(PI/3),100,0,200,100*tan(PI/3)
};//三角形三个顶点坐标 void Sierpinski(double x0,double y0,int k){if(k>max_iter) return;int rnum=rand()%3;//设置概率 if(rnum==0){x0=(x0+point[0][0])*0.5;y0=(y0+point[0][1])*0.5;}else if(rnum==1){x0=(x0+point[1][0])*0.5;y0=(y0+point[1][1])*0.5;} else{x0=(x0+point[2][0])*0.5;y0=(y0+point[2][1])*0.5;}k++;putpixel(x0,y0,YELLOW);Sierpinski(x0,y0,k);
}
int main(){initgraph(1000,1000);double x0=100,y0=0;//给一个当前点 x0,y0 Sierpinski(x0,y0,0);getch();closegraph();return 0;
}

运行:

迭代函数系统(IFS)

概念:
迭代函数系统是从一个坐标系到另一个坐标系的映射系统。迭代函数系统是以下述方式工作的:取空间中任一点Z0Z_0Z0​,以PiP_iPi​ 概率选取变换MiM_iMi​,作变换ZiZ_iZi​=MiM_iMi​(Z0Z_0Z0​),再以PiP_iPi​的概率选取变换MiM_iMi​,对Z1Z_1Z1​做变换Z2Z_2Z2​=MiM_iMi​(Z1Z_1Z1​),以此下去,得到一个无数点集。

IFS 的压缩映射 wiw_iwi​ 的参数设计 :
由分形图的相似结构, 每一个压缩映射 wiw_iwi​是 由平移、 旋转和比例 3 种变换以及它们的复合变换构成的仿射变换, 二维形式为 :

三种变换是:

其中参数 aia_iai​ , bib_ibi​ , cic_ici​ , did_idi​ 由旋转 、 比例变换所决定的实数 ;eie_iei​, fif_ifi​ 由平移变换所决定的实数 。三维形是由相应的三维空间几何变换复合而成。

IFS 吸引子自然景观的模拟总是在一个矩形区域内进行 , 取度量空间 ([ 0 , 1] × [ 0 , 1] , d), 由于wiw_iwi​ 是压缩变换, wiw_iwi​ ([ 0 , 1] × [ 0 , 1] ) [ 0 , 1] × [ 0 , 1] 。因此, 参数 aia_iai​ , bib_ibi​ , cic_ici​ , eie_iei​, fif_ifi​的取值范围在 [ -1 , 1] ;eie_iei​ 的取值影响植物x 方向的偏离程度,fif_ifi​,的取值影响植物在竖直y方向的生长程度 , 一般取值为正。

IFS 中概率 p1 , … , pn 的参数设计:
p1 , p2 , …, pn 的大小分配并不影响最终吸引子, 也就是绘制的图形完全由 wiw_iwi​ (i =1 , 2 , …, n)确 定 , 与 p1 , p2 , … , pn 无关 , p1 , p2 , …, pn 只是为计算机编程绘图提供了极大的方便 , p1 , p2 , …, pn 的大小分配只影响绘图的速度, 即迭代次数。

IFSP码举例:
Sierpinski 三角形的IFS代码:

w a b c d e f p
1 0.5 0 0 0.5 0 0 0.33
2 0.5 0 0 0.5 0.5 0 0.33
3 0.5 0 0 0.5 0.25 0.5 0.34

《分形图的 IFS 码设计》这篇文章中包含IFS 参数设计的详细介绍,可参阅【直接下载】
https://download.csdn.net/download/qq_43606914/12446875

下面使用IFS画出蕨类植物

#include<stdio.h>
#include<time.h>
#include<graphics.h>
int Iter=10000;double a[4][7]={0, 0, 0, 0.170, 0, 0, 0.01 ,0.155,-0.235,0.196,0.186,0,0.9,0.07,-0.155,0.235,0.196,0.186,0,0.4,0.07,0.850,0.025,-0.025,0.850,0,0.9,0.85
};void IFS_Tree(double x0,double y0,int k){if(k>Iter) return;int tmp=rand()%100;if(tmp<=1){x0=a[0][0]*x0+a[0][1]*y0+a[0][4];y0=a[0][2]*x0+a[0][3]*y0+a[0][5];}else if(tmp<=8){x0=a[1][0]*x0+a[1][1]*y0+a[1][4];y0=a[1][2]*x0+a[1][3]*y0+a[1][5];}   else if(tmp<=15){x0=a[2][0]*x0+a[2][1]*y0+a[2][4];y0=a[2][2]*x0+a[2][3]*y0+a[2][5];}else{x0=a[3][0]*x0+a[3][1]*y0+a[3][4];y0=a[3][2]*x0+a[3][3]*y0+a[3][5];}putpixel(x0*100+300,600-y0*100,WHITE);k++;IFS_Tree(x0,y0,k);
}
int main(){initgraph(1000,1000);srand((unsigned)time(NULL));double x0,y0=0;    x0 = rand()%200+1;y0 = rand()%200+1;IFS_Tree(x0,y0,0);getch();closegraph();return 0;
}

运行:

L系统

L系统(short for Lindenmayer systems)是比较新的制作分形的方法。这项技术是Aristrid Lindenmayer在1968提出来的,最早是用来研究植物生长的生物模型。原理即是用字符串来描述一棵树,一朵花,甚至雪花等等。

L-system 包含三个部分:

  1. Alphabet: L系统的字母由可以包含的有效字符组成。例如,字母是“
    ABC”,那么L系统中的任何有效字符串只能包含这三个字符。
  2. Axiom:描述系统初始状态的句子(由字母中的字符组成)。
  3. Rule: L系统的规则被应用于Axiom,然后被递归地应用,一遍又一遍地产生新的句子。L系统规则包含两个句子。例如,使用规则“ A —> AB”,只要在字符串中找到“ A”,就会将其替换为“ AB”。

L系统通常使用以下字母:“ FG ±[]”,表示:
F:画一条线并向前移动
G:前进(不画线)
+:右转
-:左转
[:保存当前位置
]:恢复上一个位置

分形造型的常用模型,C构造简单的IFS图形相关推荐

  1. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  2. ⅰcp经济模型_简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  3. 风控知识点一:常用模型介绍

    参考链接:https://zhuanlan.zhihu.com/p/56175215 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一. 算法 逻辑回归 决策树 集成学习(随机 ...

  4. 深度学习之四:常用模型和方法

     九.Deep Learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有 ...

  5. 机器学习常用模型:决策树_fairmodels:让我们与有偏见的机器学习模型作斗争

    机器学习常用模型:决策树 TL; DR (TL;DR) The R Package fairmodels facilitates bias detection through model visual ...

  6. springBoot整合rabbitmq并测试五种常用模型

    之前我们记录了原生java代码使用rabbitmq的方法,很简单,类似于原生jdbc代码一样,将连接对象抽离出来作为工具类,生产者和消费者通过工具类获取连接对象,进而获取通道对象,再注册交换机或者是队 ...

  7. 快速掌握 深度学习(Deep Learning) 常用概念术语,常用模型

    1.什么是深度学习? 深度学习的概念: 深度学习是机器学习的一个分支,深度学习是使用了深度神经网络的机器学习 . 所以深度学习=深度神经网络+机器学习. 神经网络,也叫作人工神经网络 .是一种模拟人脑 ...

  8. 2-2 组合优化问题-常用模型与通用求解器

    组合优化问题常用模型 组合优化问题常常难以求解,我们可以把这些转化为目前已经有成熟求解器的模型. 1. 可满足性问题(Satisfiability, SAT) 上一节已经讲过,SAT 是一个 NPC ...

  9. 【数学建模】常用模型算法及MATLAB代码汇总

    大家好,我是程序员史迪仔. 这篇文章是在大学准备数学建模比赛时,整理的学习笔记,没想到阅读量.点赞量和收藏量还是可以的,很高兴我的文章能给大家带来帮助! 一.蒙特卡洛算法 二.数据拟合 三.数据插值 ...

最新文章

  1. 反式自动微分autodiff是什么?反向传播(Back Propagation)是什么?它是如何工作的?反向传播与反式自动微分autodiff有什么区别?
  2. 写一个sql实现以下查询结果_SQL 优化极简法则,你掌握了几个?
  3. Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图
  4. python进阶学啥书籍_2018年Python学习进阶书籍推荐
  5. Android开发之assets目录下资源使用总结
  6. C语言 字符串转结构体,字符串指针转化为结构体指针!
  7. VC++网络安全编程范例(2)-创建自签名证书
  8. Redis之利用锁机制来防止缓存过期产生的惊群现象
  9. html5 video标签嵌入视频
  10. css重复,css3重复渐变效果
  11. 求两个圆公切线的模板
  12. Python3 打印26个英文字母
  13. linux mv命令例子,linux命令mv
  14. Flink 入门教程
  15. 3Dunet 降假阳性模型预处理
  16. response.getWriter()
  17. Word Embedding与Word2Vec学习
  18. amd服务器主板文件,AMD服务器主板全攻略--Opteron篇
  19. 字符串与16进制的转换
  20. CycleGan人脸转为漫画脸,牛掰的知识又增加了!| 附代码

热门文章

  1. OPPO find5(X909)Omni刷机包 原生安卓4.4.2 超流畅省电
  2. excel小数不同的取整数的方法
  3. 投放Google广告怎么做才是最合适的?谷歌广告的优势在哪
  4. 用计算机知道函数值求度数,怎么计算出余弦的度数
  5. html5基于Echarts制作3D炫酷世界地图地球制作,地图勾起动画,非常炫酷。
  6. USB HID Class 的具体应用
  7. 数字经济发展现状_(我的)数字媒体的现状
  8. word2003如何删除页眉?
  9. awk和sed命令详解
  10. 映象笔记导出到word