绘制分形火焰

3

让我先分享一下我正在阅读的PDF文档,以启动我的分形火焰绘画。

http://flam3.com/flame_draves.pdf

按照Draves的伪代码,使用提供的三个函数,我没有任何问题地绘制了Sierpinski的三角形。

F0(x, y) = ( x/2 , y/2 ) 
F1(x, y) = ( x+1/2 , y/2 ) 
F2(x, y) = ( x/2 , y+1/2 )

伪代码:
(x, y)= a random point in the bi-unit square
iterate { 
    i = a random integer from 0 to n − 1 inclusive
    (x, y) = Fi(x, y)
    plot (xf , yf ) except during the first 20 iterations
}

据我所知,分形火焰是通过应用变化(非仿射函数)来制作的,但是如果我们查看附录中的变量目录,第一幅图像(变量0)据说是使用恒等变量制作的。
现在我无法理解如何只使用一个函数创建这样的图像,再加上一个恒等函数。(难道它不会只在随机选择的像素上无限绘制一个像素吗?)
对我来说还不清楚是否应该使用与Sierpinski's gasket相同的伪代码,或者我是否没有看到其他问题?
编辑:这里是用Java编写的包含分形火焰图像生成器的最终产品:https://github.com/xtrinch/fractal_generator
1个回答

1
现在我无法理解如何只使用一个函数以及一个恒等函数就能创建出像那样的图像。(如果我们在随机选择的像素上应用恒等函数,那么它不仅会无限绘制一个像素吗?)但是这些变化并没有单独使用。相反,它们被应用于可能的i个仿射变换的结果。请参考第4页底部“3 Variations”标题下的公式:
Fi(x,y)= Vj(ai x + bi y + ci,di x + ei y + fi)
如果j为0且您正在使用variation 0,则:
V0(x,y)=(x,y)
那么
Fi(x,y)=(ai x + bi y + ci,di x + ei y + fi)
换句话说,使用变异0只意味着简单的仿射变换,没有应用额外的变异。a、b、c、d、e、f是Fi的仿射变换参数,你将有i组这些参数。如果j为1,则变异函数为:V1(x, y) = (sin(x), sin(y)),因此 Fi(x, y) = (sin(aix + biy + ci), sin(dix + eiy + fi)),以此类推。正如稍后提到的那样,对于每个i函数,你都可以有一个针对每个变异的混合参数vij,所以你计算仿射变换,将所有不同的变异函数应用于经过仿射变换的点,然后根据混合因子将结果混合在一起。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接