16 碎形制造机.docx

上传人:b****5 文档编号:30685418 上传时间:2023-08-19 格式:DOCX 页数:27 大小:694.23KB
下载 相关 举报
16 碎形制造机.docx_第1页
第1页 / 共27页
16 碎形制造机.docx_第2页
第2页 / 共27页
16 碎形制造机.docx_第3页
第3页 / 共27页
16 碎形制造机.docx_第4页
第4页 / 共27页
16 碎形制造机.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

16 碎形制造机.docx

《16 碎形制造机.docx》由会员分享,可在线阅读,更多相关《16 碎形制造机.docx(27页珍藏版)》请在冰豆网上搜索。

16 碎形制造机.docx

16碎形制造机

活用Gimp(十六)碎形制造机

作者:

李旬政

retry@micro.ee.nthu.edu.tw

http:

//micro.ee.nthu.edu.tw/~retry

碎形(fractal)字意上有破碎不完整的意思,碎形是一种具有自我相似(self-similar)的几何图形,所谓的自我相似是指图形局部与图形的整体经过放大、缩小或旋转后具有比例上的相似,本文所介绍的碎形制造机(IfsCompose)能产生这种具有自我相似的性质的图形。

执行[image]/Filters/Render/Nature/IfsCompose启动IfsCompose滤镜,碎形制造机提供一简单的操作介面来调控欲产生图形的参数设定,虽说是「简单的」操作介面但若不明白其背后的数学意义其实是很难从试误法(trialanderror)中学会这个滤镜对话盒的功能。

本文介绍碎形制造机(IfsCompose)所使用的演算法并利用Scilab数学软体来解说这演算法。

最后再回到碎形制造机滤镜对话盒解说对话盒的使用方式与参数的设定方式。

从这一期的主题中读者应更加能体会出GIMP滤镜功能的五花八门及欲精通GIMP所有滤镜功能是一件很浩大的工程。

 

IFS演算法:

IFS是IteratedFunctionSystem的缩写,IfsCompose是根据公式的设定以递回的方式描点产生碎形。

图1说明了在IteratedFunctionSystem中前一个座标值与下一个座标值的关系式,藉由控制公式的组数,每组公式a、b、c、d、e、f六个参数值,及每组公式被选到的机率可产生很多种类的碎形。

图2显示产生Sierpinski三角形所需使用的递回公式,使用Scilab来实践这演算法可产生图8的Sierpinski三角形,如图14所示碎形制造机(IfsCompose)滤镜预设画面是一个反转180度的Sierpinski三角形,这是因为其座标系以往右为正X轴往下为正Y轴。

表1将Sierpinski三角形其递回公式中各组公式的参数值以列表的方式表示其所传达的讯息与图2相同。

表2、表3列出产生蕨叶与产生树其递回公式中各组公式的参数值,与表1相较产生蕨叶与产生树都需要四组递回公式。

有了参数值可用Scilab数学软体来画出Sierpinski三角形、蕨叶与树,其所对应的程式码分别为tri.sci、fern.sci与tree.sci。

图1IFS演算法

图2产生Sierpinski三角形所需使用的递回公式。

图形

a

b

c

d

e

f

Sierpinski三角形

0.5

0

0

0.5

0

0

0.5

0

0

0.5

150

0

0.5

0

0

0.5

75

150

表1产生Sierpinski三角形其递回公式中各组公式的参数值。

图形

a

b

c

d

e

f

蕨叶

0

0

0

0.16

0

0

0.85

0.04

-0.04

0.85

0

40

0.2

-0.26

0.23

0.22

0

40

-0.15

0.28

0.26

0.24

0

10

表2产生蕨叶其递回公式中各组公式的参数值。

图形

a

b

c

d

e

f

0

0

0

0.5

0

0

0.1

0

0

0.1

0

200

0.42

-0.42

0.42

0.42

0

200

0.42

0.42

-0.42

0.42

0

200

表3产生树其递回公式中各组公式的参数值。

 

Scilab数学软体

图3为科学计算软体Scilab的主网页,网址http:

//www-rocq.inria.fr/scilab/,软体下载的网址为ftp:

//ftp.inria.fr/INRIA/Projects/Meta2/Scilab/distributions/,Scilab有各种平台的版本,我下载档案scilab-2.6-0.i686.rpm。

*.rpm也可以安装在LinuxMandrake的平台上。

安装scilab-2.6-0.i686.rpm的方法有很多,*.rpm档与rpminst程式相关联,只要在档案管理员程式中用滑鼠点一下scilab-2.6-0.i686.rpm档便会启动rpminst套件安装程式,如图5所示。

安装软体后由终端机程式的提示字元后输出scilab&可以启动Scilab主程式视窗。

Scilab主程式视窗的提示字元为-->,在提示字元后可键入欲执行的指令,可以将欲执行的指令群写成一个档案,在提示字元后键入exec(“程式档路径”)也可以执行一个程式档。

图7到图14逐步说明如何使用Scilab来绘制出IFS碎形,但读者必须先将文章中的程式码使用文字编辑器键入并存档。

程式码中的//表注解符号该行可以省略不用键入。

图3Scilab的主网页

图4rpminst程式用来安装RPM套件。

图5安装RPM的另一种方法。

图6启动Scilab主程式视窗。

图7执行程式的另一种方法。

由Scilab主程式视窗的File选单的FileOperator可启动FileMenu对话盒,设定好程式的路径选择欲执行的档名,按右下角Exec按钮即可执行程式。

图8在scilab主程式视窗的提示字元后键入exec(“/root/sci/tri.sci”),执行完tri.sci程式后,在提示字元后键入plot2d(a,b,style=-1)画出Sierpinski三角形。

plot2d函数的style参数设0或负值会画出各种样式的点(不同的Marker),style参数设正值会将两点连成一线画出各种颜色的线。

图9若在提示字元后键入plot2d(a,b,style=0),以句点符号当成一点,画出来的图较稀疏。

图10由Scilab主程式视窗的Help选单可启动ScilabHelpPanel对话盒,可以寻找正确的函数参数的设定方式及简单的范例。

图11在scilab主程式视窗的提示字元后键入exec(“/root/sci/fern.sci”),执行完fern.sci程式后,在提示字元后键入plot2d(a,b,style=-1)画出蕨叶的图案。

由于X轴与Y轴的比例不对所以蕨叶长得有点怪怪地。

图12调整绘图视窗长宽的比例藉此改变X-Y座标轴的比例。

蕨叶变瘦了。

图13在Scilab主程式视窗的提示字元后键入exec(“/root/sci/tree.sci”),执行完tree.sci程式后,在提示字元后键入plot2d(a,b,style=-1)画出树的图案。

由于点数只有10000点所以树叶长得并不茂盛。

tri.sci程式码:

//表注解符号

N=10000;//回圈次数与产生的点数

a=zeros(1,N);//利用长度为N的向量储存点的x轴座标

b=zeros(1,N);//利用长度为N的向量储存点的y轴座标

tmpx=rand

(1)*300;//x座标初始值

tmpy=rand

(1)*300;//y座标初始值

fori=1:

1:

N

r=rand

(1);//产生0到1之间的乱数

ifr<0.33//选到第一组公式

x=0.5*tmpx;

y=0.5*tmpy;

elseifr<0.66//选到第二组公式

x=0.5*tmpx+150;

y=0.5*tmpy;

else//选到第三组公式

x=0.5*tmpx+75;

y=0.5*tmpy+150;

end

tmpx=x;

tmpy=y;

a(1,i)=x;//记录第i点的x轴座标

b(1,i)=y;//记录第i点的y轴座标

end

fern.sci程式码:

//表注解符号

N=10000;//回圈次数与产生的点数

a=zeros(1,N);//储存点的x轴座标

b=zeros(1,N);//储存点的y轴座标

tmpx=rand

(1)*300;//x座标初始值

tmpy=rand

(1)*300;//y座标初始值

fori=1:

1:

N

r=rand

(1);//产生0到1之间的乱数

ifr<0.25//选到第一组公式

x=0;

y=0.16*tmpy;

elseifr<0.5//选到第二组公式

x=0.85*tmpx+0.04*tmpy;

y=-0.04*tmpx+0.85*tmpy+40;

elseifr<0.75//选到第三组公式

x=0.2*tmpx-0.26*tmpy;

y=0.23*tmpx+0.22*tmpy+40;

else//选到第四组公式

x=-0.15*tmpx+0.28*tmpy;

y=0.26*tmpx+0.24*tmpy+10;

end

tmpx=x;

tmpy=y;

a(1,i)=x;

b(1,i)=y;

end

tree.sci程式码:

//表注解符号

N=10000;//回圈次数与产生的点数

a=zeros(1,N);//储存点的x轴座标

b=zeros(1,N);//储存点的y轴座标

tmpx=rand

(1)*200;//x座标初始值

tmpy=rand

(1)*200;//y座标初始值

fori=1:

1:

N

r=rand

(1);//产生0到1之间的乱数

ifr<0.25//选到第一组公式

x=0;

y=tmpy*0.5;

elseifr<0.5//选到第二组公式

x=tmpx*0.1;

y=tmpy*0.1+200;

elseifr<0.75//选到第三组公式

x=tmpx*0.42-tmpy*0.42;

y=tmpx*0.42+tmpy*0.42+200;

else//选到第四组公式

x=tmpx*0.42+tmpy*0.42;

y=-tmpx*0.42+tmpy*0.42+200;

end

tmpx=x;

tmpy=y;

a(1,i)=x;

b(1,i)=y;

end

碎形制造机(IfsCompose):

如图14所示IfsCompose对话盒左上方是作图区域(composearea),右上方是预览区域。

作图区域中编号1、2、3倒三角形物件可用来控制碎形外观大小,预设1号物件是被选取,作图区域下方三个按钮代表调整物件的三个方法,预设是移动(Move)表示此时可在作图区域移动被选取的物件。

1.作图区域(composearea):

使用滑鼠拖曳可改变物件的位置,可旋转物件方向,可拉长压缩改变物件的外型。

2.预览区域(preview):

根据作图区域的设定产生碎形。

3.移动按钮(Move):

使用滑鼠可选取并移动物件。

移动、旋转/缩放、伸缩这三个动作是互斥的,藉由按钮来选择。

4.旋转/缩放按钮(Rotate/Scale):

点选物件,往物件中心点内拖曳等比例缩小物件尺寸,往外拖曳等比例放大物件,绕着物件中心点拖曳物件可旋转物件。

5.伸缩按钮(Stretch):

可伸长或缩短长度或宽度。

6.新增按钮(New):

预设在作图区域的物件有三个,新增一个物件后编号为4号置于作图区域十字标志的位置。

7.删除按钮(Delete):

删除被选取的物件。

8.相对机率(RelativeProbability):

决定物件对碎形外观的相对影响程度。

9.空间转换浮动视窗(SpatialTransformation):

显示被选取的物件的位置(X、Y)、缩放比例(Scale)、旋转角度(Angle)、非对称性(Asymmetry)、伸缩程度(Shear)。

使用滑鼠拖曳来精确的改变物件的位置、缩放比、旋转角度有时并不是一件容易的事,可直接在空间转换浮动视窗中的文字输入框键入欲改变的参数。

10.颜色转换浮动视窗(ColorTransformation):

设定被选取的物件其代表的叠代公式产生的点的颜色。

若点选简单选项(Simple),左边的颜色方块代表目前的前景色,右边的颜色方块也是前景色,若不改变则使用前景色当点的颜色,右边的颜色方块是个按钮可双击按钮启动一对话盒设定新的颜色。

图14IfsCompose对话盒,有SpatialTransformation与ColorTransformation两个浮动视窗。

左上方正方形的操作区域有三个三角形物件,三个三角形的相对位置与绝对位置及其外形分别代表三组不同的递回公式,使用滑鼠可移动、旋转、缩放,伸长或缩短三角形物件这些改变也会反映在SpatialTransformation浮动视窗中的六个参数值上。

图15IfsCompose选项对话盒,可设定递回的次数。

图16ColorTransformation浮动视窗,可个别设定每个三角形物件的颜色。

图17在作图区域内按右键可启动一选单,可执行移动、旋转/缩放、伸缩、全选、重新计算中心、复原、重复等功能。

这些功能还有相对应的快捷键,方便快速执行想要的功能。

IFS原理:

作图区域的各个物件的参数设定会影响预览区域的碎形图案,每一个物件代表一组叠代公式,随机选择一组公式计算出下一点,经过数万次的叠代产生密密麻麻的点,构成了碎形的图案。

空间转换浮动视窗中,参数x、y相当于e、f,参数scale相当于β,参数Angle相当于Θ,Asymmetry与shear参数尚不知道它的数学意义。

若有三个物件则对应有三组叠代公式,在每一次叠代的过程中随机选择一组叠代公式来产生下一个点,经过65536的叠代产生65536个点便出现乱中有序、序中有乱的碎形,预设三组公式被选到的机率都一样,可设定相对机率参数(RelativeProbability)改变该公式对碎形图案影响程度。

图18前一个座标值与下一个座标值的关系式的转换矩阵以极座标来表示。

图19预设参数的叠代公式可表示为上式,cosΘ=1表示Θ=0度。

图20叠代公式有两种解释方式,第一种解释方式,区域1、2、3的图案相当于原图缩小一半再平移至该位置。

第二种解释方式,原本大三角形内的点,若选择第一组叠代公式经过计算新产生的点的座标会落入区域1的范围内;若选择第二组公式则落入区域2内;若选择第三组公式则落入区域3内。

基本操作:

当作图区域内有三个物件时,物件的外观是三边形;有四个物件时,物件的外观是四边形。

物件外型由各个物件中心点连线来决定,所以移动单一个物件中心位置,所有物件的外型都会改变。

若只是想要改变单一个物件外型则必须交互使用伸缩(Stretch)与旋转/缩放(Rotation/Scale)两动作,调整物件外型至你想要的样子,但每个物件外型仍旧受限于物件的个数,如:

三个物件永远是三边形,无法变为五边形,但五边形可退化为四边形或三边形。

图21至图28练习移动、旋转、伸长、缩放作图区域的物件对预览区域图形的影响。

图29至图32产生一些较常见到的有规则的碎形。

图33至图41则说明如何从无到有产生一片栩栩如生的叶子。

图21往十字标志移动移动物件1,连接物件1、2、3的中心此形状为物件的新外型,三个物件的外型都改变,碎形的整体外型也改变。

图22旋转物件1,物件1的中心点不受影响,物件1、2、3的中心的连线所构成的形状也没有改变,碎形的整体外型不受影响仍旧为倒三角形,但左上方碎形整体外型为朝上的正三角形。

图23伸长物件1,将三角形压扁,中心点不受影响,碎形的整体外型不受影响仍旧为倒三角形,但左上方碎形整体外型为朝左上角的拉长三角形。

图24缩放物件1,缩放指令与伸长物件指令功能并不相同,缩放指令为等比例放大或缩小物件。

图25伸长物件1,将将三角形拉长接近一条细线,而后缩放物件1,将细线化的三角形等比例缩短,最后物件变为又短又扁的三角形像一条直线。

伸长与缩放动作不受影响中心点,碎形的整体外型不受影响仍旧为倒三角形,但左上方碎形外型唯一条条的细线。

图26使用右键启动选单执行全选功能(SelectAll),再执行移动功能,可同时移动所有的物件。

图27使用右键启动选单执行全选功能,再执行旋转/缩放、伸缩功能,可同时旋转/缩放所有的物件。

图28使用右键启动选单执行全选功能,再执行伸缩功能,可同时伸缩所有的物件。

有规则的碎形:

图29删除物件3,物件1、2的缩放参数设0.3333,产生的图案是数论(NumberTheorem)当中赫赫有名的康托集合(CantorSet),康托用来它来阐述不可数集合(uncountableset)的概念。

图30新增物件编号为4,往右下方移动物件4,连接物件1、2、3、4的中心此形状为四边形,碎形的整体外型变为四边形。

图31物件1、2、3都转动45度。

使用滑鼠拖曳来产生旋转,精确的旋转一个角度并不容易控制,可直接在空间转换浮动视窗中的键入欲改变的参数。

先分别用滑鼠选取物件1、2、3,而后都在Angle参数文字输入框中键入45。

碎形左上、右上、下方这三部分是缩小版的碎形,左上、右上、下方的碎形的中心点的连线仍旧为倒三角形,而左上方的碎形可在分解为三个缩小版的碎形其中心点的连线为物件1的形状一向为转45度的倒三角形。

图32新增物件4、物件5。

物件1的x、y参数设(0.2,0.2),物件2的x、y参数设(0.8,0.2),物件3的x、y参数设(0.2,0.8),物件4的x、y参数设(0.8,0.8),物件5的x、y参数设(0.5,0.5),五个物件的Scale参数都设为0.333。

物件5位于物件1、2、3、4的共同中心点,又物件1、2、3、4的中心点连线为正方形,故碎形的整体外型为正方形。

叶子:

图33新增物件4,往右下方移动物件4,伸长物件4,将将三角形拉长接近一条细线。

图34缩放物件4,将细线化的三角形等比例缩短,变为短的扁的三角形像一条直线。

图35旋转物件2、物件3让菱形的短边朝向十字标志。

图36缩小物件2、物件3,放大物件1,让叶子的尖端较长左右两侧较短。

最后,细部调整物件1、2、3、4的大小、位置形状,以产生较完美的叶子。

图37物件1的参数设定。

使用滑鼠拖曳来精确的设定物件的位置、缩放比、旋转角度并不是一件容易的事,可直接在空间转换浮动视窗中的文字输入框键入欲改变的参数。

图37到图40的设定可以产生叶子,提供给读者参考。

图38物件2的参数设定。

图39物件3的参数设定。

图40物件4的参数设定。

图41将颜色设定为褐色系。

一叶知秋。

ChaosGame与影印机:

如图20所示叠代公式有两种解释方式,我们可以使用GIMP实际来缩小复制并移动图形物件来产生Sierpinski三角形,如图42、图43、图44所示相同的步骤一直操作下去最后会越来越像图8的Sierpinski三角形。

MichaelF.Barnsley称IteratedFunctionSystem为ChaosGame。

我们也可以用影印机来玩这样的游戏,在影印纸上画上三角形并涂满(相当于图42),缩小0.5倍印出三角形图样并且复印三份;将缩小的版本整齐排列在影印机上,排列出如图43的图案,缩小0.5倍复印三份;将缩小的版本整齐排列在影印机上,排列出如图44的图案,如此反复操作便能使用影印机印出Sierpinski三角形。

当你用影印机来玩ChaosGame时影印纸上所画可以是任何图形,甚至是企鹅、凤梨、大头照。

广义的Sierpinski三角形并不限定其整体的外观为正三角形,因此我们可以用GIMP更快速地更容易地制造出Sierpinski三角形,在图45到图62以图示法说明之。

图42边长512高为443的正三角形。

图43新增一512x443的全白影像,而后将图42的正三角形缩小为原尺寸的1/2后复制三份分别放在新影像的左下方、右下方与上方中间处。

图44新增一512x443的全白影像,而后将图43的影像缩小为原尺寸的1/2后复制三份分别放在新影像的左下方、右下方与上方中间处。

图45Tux,Linux的吉祥物。

出处为http:

//www.isc.tamu.edu/~lewing/linux/作者为LarryEwing。

影像尺寸为327x360。

图46执行新增图像[image]/图像Image/图像尺寸Scaleimage将影像长宽放大4倍。

(这步骤并非完全必要,原影像尺寸太小时才需执行。

 

图47影像放大4倍,影像尺寸为1308x1440。

图48执行新增图像[image]/滤镜Filters/映射Map/小砖块SmallTile,参数使用预设值将图47缩小1/2推砌出2x2砖块状的影像结果图显示在图50。

图49为了要精确地产生选取区域必需使用格线,放大影像显示比例至1600%,在X=655处产生一垂直格线,在Y=720处产生一垂直格线。

最后再缩小影像显示比例为50%。

图50格线将影像分为4个部份。

图51使用矩形选取工具将右上方1/4的影像选起来,将选取区域填上白色,可使用快捷键Ctrl+.。

释放选取区域,可使用快捷键Shift+Ctrl+A。

图52新增图像[image]/滤镜Filters/映射Map/小砖块SmallTile,参数使用预设值将图51缩小1/2推砌出2x2砖块状的影像。

图53使用矩形选取工具将右上方1/4的影像选起来,将选取区域填上白色,可使用快捷键Ctrl+.。

释放选取区域,可使用快捷键Shift+Ctrl+A。

图54使用SmallTile滤镜将图53缩小1/2推砌出2x2砖块状的影像。

将右上方1/4的影像除去填入白色。

图55使用SmallTile滤镜将图54缩小1/2推砌出2x2砖块状的影像。

将右上方1/4的影像除去填入白色。

图56重复上述步骤最后得到Sierpinski三角形只不过它的每一”点”是一只企鹅。

图57凤梨,祝你好运旺旺来。

图58使用SmallTile滤镜将图56缩小1/2推砌出2x2砖块状的影像。

将右上方1/4的影像除去填入白色。

图59重复上述步骤数次,最后得到Sierpinski三角形只不过它的每一”点”是一颗凤梨。

图60利用图57可使用不同的递回规则制造出不同碎形。

使用SmallTile滤镜将图57缩小1/3推砌出3x3砖块状的影像。

图61定义左上方凤梨的位置为(1,1)右下方凤梨的位置为(3,3)。

将位置在(2,2)、(2,3)、(3,2)的凤梨除去填入白色。

图62重复上述步骤数次,最后得到新品种的碎形,取个吉祥的名字吧,就叫它李旬政的凤梨,英文名字为Lee’spineapple。

逆向思考与碎形压缩:

如果给你一张具有自我相似性质的影像如何找出代表该影像的公式与参数,图63的Sierpinski三角形已经是我们非常熟悉的图形,很自然地我们会对影像作这样的分割T1表ΔABD,T2表ΔBCE,T3表ΔDEF,T4表ΔACF,三角形T1、T2、T3是三角形T4的收缩图尺寸只有原图的一半,而后利用T1、T2、T3顶点与T4顶点的关系可找出

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1