仿射等价类:仿射变换巴恩斯利蕨
仿射等价类:仿射变换巴恩斯利蕨定义中点变换仿射变换生成函数FSM例如n点为(x0 y0),目标点为(cx cy) 那么求中点的变换他们坐标相加除以2,对应的仿射变换如下:中点仿射变换定义仿射变换生成函数
仿射变换仿射变换
上图是从第n个元素变换到第n 1个元素的公式,其中a,b,c都为二维向量,如果c为零,则就成为线性变换,线性变换是仿射变换的特例,定义了a,b,c向量的值,就定义了一个仿射变换
示例定义一个仿射变换,目标位置为输入点到目标点的中点位置
示例
例如n点为(x0 y0),目标点为(cx cy) 那么求中点的变换他们坐标相加除以2,对应的仿射变换如下:
中点仿射变换
定义仿射变换生成函数
仿射变换生成函数FSM
定义中点变换
起点为(0,0),目标为(1,1)
多次迭代描点
这个仿射变换的特征就是多次迭代后生成的点越来越接近目标,这个就是确定的仿射变换规则,如何生成分形呢,分形就是混沌的边缘,要引入不确定性,如何实现呢
多个仿射变换随机组合这里我们定义三个中点仿射变换,选取三个目标点A.(0,0),B.(1,0),C.(0,1),根据上面的中点仿射变换定义出三个仿射变换:
三个求中点仿射变换
定义了一个随机过程,是的每次调用变换的时候随机给出三个仿射变换中的一个,这里的几率是平均分配,接下来描点看看效果:
描点100个,大致是在三个目标点组成的三角形内部
描点1000个,貌似有些死角的地方
10000个点,有规律了
难道就是传说中的谢尔宾斯基三角形,只不过原版是使用的正三角形,点描的越多,图形越精细
10万个点
好像点太大了,细节被遮住了,下面把点缩小试试
同样10万个点,但是细节更好了
巴恩斯利蕨巴恩斯利蕨生成原理和分形三角形类似,不同的是三角形只需要三个仿射变换,巴恩斯利蕨是四个变换,同时每个变换的执行概率要精心设计
根据概率随机执行变换
网上找一组参数
填入参数,生成规则
巴恩斯利蕨,描点10万