




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
參考書:《分形演算法與程式設(shè)計(jì)》1
分形圖的遞歸演算法2.1Cantor三分集的遞歸演算法2.2Koch曲線的遞歸演算法
2.3Sierpinski墊片的遞歸演算法2.4Hilbert-Peano曲線的演算法2.5分支結(jié)構(gòu)分形遞歸演算法2.6分形樹遞歸演算法參考書:《分形演算法與程式設(shè)計(jì)》2遞歸演算法u
直接遞歸調(diào)用的例子如下:voidRecur(n){
……Recur(m);……}過程Recur的內(nèi)部又調(diào)用了自身——Recur過程。
參考書:《分形演算法與程式設(shè)計(jì)》3遞歸演算法u
間接遞歸調(diào)用的例子如下:voidRecur_A(n){……Recur_B(m);
……}voidRecur_B(n){……Recur_A(m);
……}
參考書:《分形演算法與程式設(shè)計(jì)》42.1Cantor三分集的遞歸演算法演算法:Cantor(ax,ay,bx,by)標(biāo)題:Cantor三分集的遞歸演算法參數(shù):c(終止遞歸的小量)
d(不同層次線之間的距離)變數(shù):ax,ay(曲線端點(diǎn)座標(biāo))
bx,by(曲線端點(diǎn)座標(biāo))
cx,xy(曲線端點(diǎn)座標(biāo))
dx,dy(曲線端點(diǎn)座標(biāo))函數(shù):plot(x1,y1)–(x2,y2)
(畫直線函數(shù))BEGINIF((bx-ax)<c)THENBEGIN
plot(ax,ay)-(bx,by)ENDELSEBEGIN
plot(ax,ay)-(bx,by)
cx=ax+(bx-ax)/3cy=ay+ddx=bx-(bx-ax)/3dy=by+day=ay+dby=by+dcantor(ax,ay,cx,cy)cantor(dx,dy,bx,by)ENDEND參考書:《分形演算法與程式設(shè)計(jì)》52.2Koch曲線的遞歸演算法演算法:Koch(ax,ay,bx,by,c)標(biāo)題:Koch曲線的遞歸演算法參數(shù):c(終止遞歸的小量)
PI(π值)變數(shù):ax,ay(線段端點(diǎn)座標(biāo))
bx,by(線段端點(diǎn)座標(biāo))
cx,xy(線段端點(diǎn)座標(biāo))
dx,dy(線段端點(diǎn)座標(biāo))
ex,ey(線段端點(diǎn)座標(biāo))
L
(線段長(zhǎng)度)
alpha(基線與水平線正方向夾角)函數(shù):plot(x1,y1)–(x2,y2)
(畫直線函數(shù))
sin()
(正弦函數(shù))
cos()
(余弦函數(shù))
ArcTan()
(反正切函數(shù))
sqrt()
(開平方函數(shù))參考書:《分形演算法與程式設(shè)計(jì)》62.2Koch曲線的遞歸演算法BEGIN
IF((bx-ax)*(bx-ax)+(by-ay)*(by-ay))<cTHEN
BEGINplot(ax,ay)-(bx,by)
END
ELSEBEGINcx=ax+(bx-ax)/3cy=ay+(by-ay)/3ex=bx-(bx-ax)/3ey=by-(by-ay)/3L=sqrt((ex-cx)*(ex-cx)+(ey-cy)*(ey-cy))alpha=ArcTan((ey-cy)/(ex-cx))
IF((ex-cx)<0)THEN參考書:《分形演算法與程式設(shè)計(jì)》72.2Koch曲線的遞歸演算法
BEGINalpha=alpha+PI
ENDdy=cy+sin(alpha+PI/3)*Ldx=cx+cos(alpha+PI/3)*LKoch(ax,ay,cx,cy,c)Koch(ex,ey,bx,by,c)Koch(cx,cy,dx,dy,c)Koch(dx,dy,ex,ey,c)ENDEND參考書:《分形演算法與程式設(shè)計(jì)》82.3Sierpinski墊片的遞歸演算法演算法:Sierpinski(x,y,L,n)標(biāo)題:Sierpinski墊片遞歸演算法參數(shù):n(遞歸深度)變數(shù):x,y(三角形中心點(diǎn)座標(biāo))
x1,y1
(三角形頂點(diǎn)座標(biāo))
x2,y2(三角形頂點(diǎn)座標(biāo))
x3,y3
(三角形頂點(diǎn)座標(biāo))
x01,y01(小三角形中心點(diǎn)座標(biāo))
x02,y02(小三角形中心點(diǎn)座標(biāo))
x03,y03(小三角形中心點(diǎn)座標(biāo))
L
(三角形的邊長(zhǎng))函數(shù):plot(x1,y1)–(x2,y2)
(畫直線函數(shù))
sin()
(正弦函數(shù))
cos()
(余弦函數(shù))
sqrt()
(開平方函數(shù))參考書:《分形演算法與程式設(shè)計(jì)》92.3Sierpinski墊片的遞歸演算法BEGINIF(n=1)THENBEGIN
x1=x-L/2y1=y+L*(sin(PI/6)/cos(PI/6))/2x2=x+L/2y2=y+L*(sin(PI/6)/cos(PI/6))/2x3=xy3=y-L*(sin(PI/6)/cos(PI/6))
plot(x1,y1)-(x1,y1)plot(x2,y2)-(x2,y2)plot(x3,y3)-(x3,y3)
ENDELSEBEGIN
x01=x-L/4y01=y+L*(sin(PI/6)/cos(PI/6))/4x02=x-L/4y02=y+L*(sin(PI/6)/cos(PI/6))/4x03=xy03=y-L*(sin(PI/6)/cos(PI/6))/2Sierpinski(x01,y01,L/2,n-1)Sierpinski(x02,y02,L/2,n-1)Sierpinski(x03,y03,L/2,n-1)ENDEND參考書:《分形演算法與程式設(shè)計(jì)》102.4Hilbert-Peano曲線的演算法演算法:Peano(n)標(biāo)題:Hilbert-Peano曲線遞歸演算法變數(shù):n(遞歸深度)
len(線的長(zhǎng)度)
x,y(端點(diǎn)座標(biāo))函數(shù):lineto(x,y)(畫直線函數(shù))過程:a(n)(基本元素構(gòu)型)
b(n)(基本元素構(gòu)型)
c(n)(基本元素構(gòu)型)
d(n)(基本元素構(gòu)型)參考書:《分形演算法與程式設(shè)計(jì)》112.4Hilbert-Peano曲線的演算法BEGINa(n)
BEGIN
IFn>0THEN
BEGINd(n-1)x=x-lenlineto(x,y)a(n-1)y=y+lenlineto(x,y)a(n-1)x=x+lenlineto(x,y)b(n-1)
END
ENDb(n)
BEGIN
IFn>0THEN
BEGINc(n-1)y=y-lenlineto(x,y)b(n-1)x=x+lenlineto(x,y)b(n-1)y=y+lenlineto(x,y)a(n-1)
END
ENDc(n)
BEGIN
IFn>0THEN
BEGINb(n-1)x=x-lenlineto(x,y)c(n-1)y=y+lenlineto(x,y)c(n-1)x=x+lenlineto(x,y)d(n-1)
END
ENDd(n)
BEGIN
IFn>0THEN
BEGINa(n-1)y=y-lenlineto(x,y)d(n-1)x=x+lenlineto(x,y)d(n-1)y=y+lenlineto(x,y)c(n-1)
END
ENDEND參考書:《分形演算法與程式設(shè)計(jì)》122.5分支結(jié)構(gòu)分形遞歸演算法演算法:Ramus
(x,y,alpha,L,n)標(biāo)題:分支結(jié)構(gòu)遞歸演算法參數(shù):PI(π值)變數(shù):n(遞歸深度)
L(線段長(zhǎng)度)
x,y(線段起點(diǎn)座標(biāo))
x1,y1(線段終點(diǎn)座標(biāo))
alpha
(主幹生成角度)
alpha_L(左支幹生成角度)
alpha_R(右支幹生成角度)函數(shù):plot(x1,y1)-(x2,y2)
(畫直線函數(shù))
sin()(正弦函數(shù))
cos()(余弦函數(shù))參考書:《分形演算法與程式設(shè)計(jì)》132.5分支結(jié)構(gòu)分形遞歸演算法BEGIN
IF(n>0)THEN
BEGINx1=x+cos(alpha)*Ly1=y-sin(alpha)*Lplot(x,y)-(x1,y1)alpha_L=alpha+PI/8alpha_R=alpha-PI/8L=2*L/3Ramus(x2,y2,alpha_L,L,n-1)Ramus(x2,y2,alpha_R,L,n-1)
ENDEND參考書:《分形演算法與程式設(shè)計(jì)》142.6分形樹遞歸演算法演算法:tree
(x,y,L,alpha)標(biāo)題:分形樹遞歸演算法參數(shù):PI(π值)
A(主幹生長(zhǎng)方向)
B(側(cè)幹與主幹的夾角)
C(主幹偏轉(zhuǎn)角度)
s1(長(zhǎng)度小量,控制遞歸深度)
s2(主幹與側(cè)幹之比)
s3(上一級(jí)主幹與下一級(jí)主幹之比)變數(shù):L
(主幹的長(zhǎng)度)
x,y(主幹起點(diǎn)座標(biāo))
x1,y1(中間分叉點(diǎn)座標(biāo))
x2,y2(主幹終點(diǎn)座標(biāo))
x1L,y1L(第一左分支終點(diǎn)座標(biāo))
x1R,y1R(第一右分支終點(diǎn)座標(biāo))
x2L,y2L(第二左分支終點(diǎn)座標(biāo))
x2R,y2R(第二右分支終點(diǎn)座標(biāo))函數(shù):plot(x1,y1)-(x2,y2)
(畫直線函數(shù))
sin()(正弦函數(shù))
cos()(余弦函數(shù))參考書:《分形演算法與程式設(shè)計(jì)》152.6分形樹遞歸演算法BEGIN
IF(L>s1)THEN
BEGINx2=x+L*cos(A*PI/180)y2=y-L*sin(A*PI/180)x2L=x2+L/s2*cos((A+B)*PI/180)y2L=y2-L/s2*sin((A+B)*PI/180)x2R=x2+L/s2*cos((A-B)*PI/180)y2R=y2-L/s2*sin((A-B)*PI/180)x1=x+L/s2*cos(A*PI/180)y1=y-L/s2*sin(A*PI/180)x1L=x1+L/s2*cos((A+B)*PI/180)y1L=y1-L/s2*sin((A+B)*PI/180)x1R=x1+L/s2*cos((A-B)*PI/180)y1R=y1+L/s2*sin((A-B)*PI/180)plot(x,y)-(x2,y2)plot(x2,y2)-(x2L,y2L)plot(x2,y2)-(x2R,y2R)plot(x1,y1)-(x1R,y1R)plot(x1,y1)-(x1L,y1L)tree(x2,y2,L/s3,A-C)tree(x2L,y2L,L/s2,A+B)tree(x2R,y2R,L/s2,A-B)tree(x1R,y1R,L/s2,A-B)tree(x1L,y1L,L/s2,A-B)
ENDEND參考書:《分形演算法與程式設(shè)計(jì)》16第3
章文法構(gòu)圖演算法3.1LS文法3.2單一規(guī)則的LS文法生成
3.3多規(guī)則的LS文法生成3.4隨機(jī)LS文法參考書:《分形演算法與程式設(shè)計(jì)》17文法構(gòu)圖演算法字母表:L,R生成規(guī)則:L→R,R→LR初始字母:R則有:R→LR→RLR→LRRLR→RLRLRRLR→LRRLRRLRLRRLR→……
參考書:《分形演算法與程式設(shè)計(jì)》183.1LS文法二維LS是字母表的繪圖規(guī)則如下:F:以當(dāng)前方向前進(jìn)一步,並畫線;f:以當(dāng)前方向前進(jìn)一步,不畫線;+:逆時(shí)針旋轉(zhuǎn)角;-:順時(shí)針旋轉(zhuǎn)角;[:將海龜當(dāng)前資訊壓棧;]:將“[”時(shí)刻的海龜資訊出棧。參考書:《分形演算法與程式設(shè)計(jì)》193.2單一規(guī)則的LS文法生成Koch曲線的LS文法如下:
w:Fa:60oP:F→F+F--F+F
步驟0:F
步驟1:F+
F--F+F
步驟2:F+
F--F+
F+
F+
F--F+
F--F+
F--F+
F+
F+
F--F+
F
步驟3:F+
F--F+
F+
F+
F--F+
F--F+
F--F+
F+
F+
F--F+
F+
F+
F--F+
F+
F+
F--F+
F--F+
F--F+
F+
F+
F--F+
F--F+F--F+F+
F+
F--F+
F--F+
F--F+
F+
F+
F--F+
F+
F+
F--F+
F+
F+
F--F+
F--F+
F--F+F+
F+
F--F+
F
步驟4:……參考書:《分形演算法與程式設(shè)計(jì)》203.3單一規(guī)則的LS演算法實(shí)現(xiàn)演算法:LS標(biāo)題:L_System生成演算法參數(shù):Axiom(公理)
n(字串替換次數(shù))變數(shù):a[](被替換字元)
x[],y[](替換字串)
len(線段長(zhǎng)度)
Aipha(基線與水平線夾角)
Dalta(生成角度)
ox,oy(起始座標(biāo)點(diǎn))
n(遞歸深度)
bef(前一節(jié)點(diǎn))
aft(後一節(jié)點(diǎn))函數(shù):lineto(x,y)(畫直線函數(shù))
GetLength(x)(字串長(zhǎng)度)BEGIN//初始化
x[0]=“F”a[1]=“F”x[1]=“F+F--F+F”len=10Aipha=0Delta=60ox=100oy=400n=4參考書:《分形演算法與程式設(shè)計(jì)》213.3單一規(guī)則的LS演算法實(shí)現(xiàn)y[]=x[0]
FORi=1TOnyL=GetLength(y)j=0
WHILE(j<yL)
IFy[j]==a[1]THENtree[]=tree[]+x[1]j=j+1
ELSEtree[]=tree[]+y[j]j=j+1
ENDIFENDWHILE
y[]=tree[]tree.Empty()//清空
ENDFOR
tree[]=y[]//按字元繪圖
WHILE(i<xL)
SWITCH(tree[i])
CASE“F”aft.x=bef.x+len*cos(Aipha*PI/180)aft.y=bef.y-len*sin(Aipha*PI/180)aft.d=bef.d//方向
LineTO(aft.x,aft.y)bef=aft
BREAK
CASE“[”stack[k]=befk=k+1
BREAK
CASE“]”bef=stack[k-1]參考書:《分形演算法與程式設(shè)計(jì)》223.3單一規(guī)則的LS演算法實(shí)現(xiàn)k=k-1LineTO(bef.x,bef.y)
BREAK
CASE“+”bef=bef+DeltaBREAK
CASE“-”bef=bef-Delta
BREAK
ENDSWITCHi=i+1
ENDWHILEEND參考書:《分形演算法與程式設(shè)計(jì)》233.3多規(guī)則的LS文法生成為了生成更複雜的圖形,可將字母表增加字母元素Sierpinski墊片的LS文法如下:
w:La:600P1:L→+R-L-R+
P2:R→-L+R+L-相應(yīng)的改造1:x[0]=“L”a[1]=“L”x[1]=“+R-L-R+”a[2]=“R”x[2]=“-L+R+L-”Delta=60參考書:《分形演算法與程式設(shè)計(jì)》243.3多規(guī)則的LS文法生成相應(yīng)的改造2:WHILE(j<xL)
IFy[j]==a[1]THENtree[]=tree[]+x[1]j=j+1ELSEIFy[j]==a[2]THEN
tree[]=tree[]+x[2]j=j+1
ELSEtree[]=tree[]+y[i]j=j+1
ENDIFy[]=tree[]
ENDWHILE
參考書:《分形演算法與程式設(shè)計(jì)》253.3多規(guī)則的LS文法生成相應(yīng)的改造3:
CASE“L”aft.x=bef.x+len*cos(Aipha*PI/180)aft.y=bef.y-len*sin(Aipha*PI/180)aft.d=bef.d//方向
LineTO(aft.x,aft.y)bef=aft
BREAK
CASE“R”aft.x=bef.x+len*cos(Aipha*PI/180)aft.y=bef.y-len*sin(Aipha*PI/180)aft.d=bef.d//方向
LineTO(aft.x,aft.y)bef=aft
BREAK參考書:《分形演算法與程式設(shè)計(jì)》263.4隨機(jī)LS文法w:Fa:25P1:F————→F[+F]F[-F]FP2:F————→F[+F]F[-F[+F]]P3:F————→FF[-F+F+F]+[+F-F-F]為了更好的模擬自然景物,需要隨機(jī)使用多個(gè)變換規(guī)則。p1p2p3相應(yīng)的改造1:x[0]=“F[+F]F[-F]F”x[1]=“F[+F]F[-F[+F]]”x[2]=“FF-[-F+F+F]+[+F-F-F]”相應(yīng)的改造2:WHILE(j<xL)
IFy[j]==“F”THEN
r=Rand()%3tree[]=tree[]+x[r]j=j+1
ELSEtree[]=tree[]+y[r]j=j+1
ENDIFENDWHILE參考書:《分形演算法與程式設(shè)計(jì)》273.4隨機(jī)LS文法參考書:《分形演算法與程式設(shè)計(jì)》28第4
章迭代函數(shù)系統(tǒng)演算法4.1混沌遊戲4.2迭代函數(shù)系統(tǒng)4.3相似變換與仿射變換4.4IFS碼4.5Sierpinski墊片的IFS生成4.6拼貼與IFS碼的確定
4.7IFS植物形態(tài)實(shí)例4.8複平面上的IFS演算法參考書:《分形演算法與程式設(shè)計(jì)》29混沌遊戲4.1給定平面上三點(diǎn)A,B,C。再任意給定初始點(diǎn)Z0,做下列迭代。???íì+++=+,2/)(,2/)(,2/)(1CZBZAZZnnnn當(dāng)擲出的硬幣呈正面當(dāng)擲出的硬幣呈反面當(dāng)擲出的硬幣呈側(cè)面參考書:《分形演算法與程式設(shè)計(jì)》30迭代函數(shù)系統(tǒng)4.2迭代函數(shù)系統(tǒng)(IteratedFunctionSystem,IFS)是分形理論的重要分支。它將待生成的圖像看成是由許多與整體相似的(自相似)或經(jīng)過一定變換與整體相似的(自仿射)小塊拼貼而成。參考書:《分形演算法與程式設(shè)計(jì)》31相似變換與仿射變換直觀上看:相似變換是指在各個(gè)方向上變換的比率必須相同的一種比例變換,仿射變換是指在不同的方向上變化的比率可以不同的一種比例變換。
4.3相似變換:如果對(duì)於任意兩點(diǎn)A、B,以及對(duì)應(yīng)點(diǎn)A’、B’,總有A’B’=k·AB(k為正實(shí)數(shù)),那麼,這個(gè)變換叫做相似變換,實(shí)數(shù)k叫做相似比。仿射變換:x’=ax+by+ey’=cx+dy+f其中a,b,c,d,e,f為仿射變換係數(shù)。參考書:《分形演算法與程式設(shè)計(jì)》324.4IFS碼用多個(gè)仿射變換式表達(dá)一個(gè)圖象w1,w2,w3,……,使用每一個(gè)仿射變換式的概率p可以不同,一般面積越大,p值越大。於是,只要獲得a,b,c,d,e,f,p(IFS碼)的值便可以得到要表達(dá)的圖形。x’=a1·x+b1·y+e1y’=c1·x+d1·y+f1w1x’=a2·x+b2·y+e2y’=c2·x+d2·y+f2w2x’=a3·x+b3·y+e3y’=c3·x+d3·y+f3w3p1p2p3p1+p2+p3=1參考書:《分形演算法與程式設(shè)計(jì)》334.5Sierpinski墊片的IFS生成
由於生成的三個(gè)小三角形的面積相等,所以我們可以讓w1、w2、w3出現(xiàn)的概率相同或相近。
x’=0.5xy’=0.5yx’=0.5x+0.5y’=0.5yx’=0.5x+0.25y’=0.5y-0.5x’=0.5·x+0·y+0y’=0·x+0.5·y+0x’=0.5·x+0·y+0.5y’=0·x+0.5·y+0x’=0.5·x+0·y+0.25y’=0·x+0.5·y-0.5w1w2w3參考書:《分形演算法與程式設(shè)計(jì)》344.5Sierpinski墊片的IFS生成
演算法:IFS標(biāo)題:IFS生成演算法參數(shù):
n(迭代次數(shù))
m[](存儲(chǔ)IFS碼值)變數(shù):a,b,c,d,e,f,p(IFS碼變數(shù))函數(shù):Pset(x,y)(畫點(diǎn)函數(shù))
Rand(隨機(jī)函數(shù))BEGIN//IFS碼賦值
m[0,0]=0.5;m[0,1]=0;m[0,2]=0m[0,3]=0;m[0,4]=0;m[0,5]=0m[0,6]=0.333m[1,0]=0.5;m[1,1]=0;m[1,2]=0m[1,3]=0.5;m[1,4]=0.5;m[1,5]=0m[1,6]=0.333m[2,0]=0.5;m[2,1]=0;m[2,2]=0m[2,3]=0.5;m[2,4]=0.25;m[2,5]=0.5m[2,6]=0.334n=6000
WHILEn>0p=Rand
SWITCH(P)
CASEIS<=m[0,6]a=m[0,0];b=m[0,1];c=m[0,2]d=m[0,3];e=m[0,4];f=m[0,5]
BREAK
CASEIS<=(m[0,6]+m[1,6])a=m[1,0];b=m[1,1];c=m[1,2]d=m[1,3];e=m[1,4];f=m[1,5]
BREAK參考書:《分形演算法與程式設(shè)計(jì)》354.5Sierpinski墊片的IFS生成
CASEIS<=(m[0,6]+m[1,6]+m[2,6])a=m[2,0];b=m[2,1];c=m[2,2]d=m[2,3];e=m[2,4];f=m[2,5]BREAKCASEIS<=(m[0,6]+m[1,6]+m[2,6]+m[3,6])a=m[3,0];b=m[3,1];c=m[3,2]d=m[3,3];e=m[3,4];f=m[3,5]
ENDSWITCH
x=a*x+b*y+ex=c*x+d*y+fPset(100+600*x,500-600*y)n=n-1
ENDWHILEEND(源代碼:書中程序4.1)參考書:《分形演算法與程式設(shè)計(jì)》364.6拼貼與IFS碼的確定
此時(shí)四個(gè)子圖分別是目標(biāo)圖的1/4、1/5、1/4、1/2大小的複製品。然後按順序互動(dòng)式地在螢?zāi)簧险{(diào)節(jié)每一個(gè)子圖的仿射變換參數(shù)ai、bi、ci、di、ei,使得平移、旋轉(zhuǎn)後基本覆蓋住目標(biāo)圖。
參考書:《分形演算法與程式設(shè)計(jì)》374.7IFS植物形態(tài)實(shí)例
IFS碼在書中表4.18IFS碼在書中表4.20IFS碼在書中表4.19參考書:《分形演算法與程式設(shè)計(jì)》384.8複平面上的IFS演算法
參考書:《分形演算法與程式設(shè)計(jì)》394.8複平面上的IFS演算法
演算法:Julia_IFS標(biāo)題:Julia集的IFS演算法參數(shù):z(迭代次數(shù))
PI(π值)
RAND_MAX(隨機(jī)最大值)變數(shù):k(概率變數(shù))
x,y(z的實(shí)部和虛部)
cx,cy(c的實(shí)部和虛部)
r(極距)
a,b,e,f,m,n,wx,wy,theta
函數(shù):Pset(x,y)(畫點(diǎn)函數(shù))
Rand(隨機(jī)函數(shù))
sin(正弦函數(shù))
cos(余弦函數(shù))
atan(反正切函數(shù))BEGINFORi=1TOzm=a*x+en=b*y+fIFi>10THENPset(m,n)ENDIFwx=x-cxwy=y-cyIFwx>0THENtheta=atan(wy/wx)ENDIFIFwx<0THENtheta=PI+atan(wy/wx)ENDIFIFwx=0THENtheta=PI/2ENDIF參考書:《分形演算法與程式設(shè)計(jì)》404.8複平面上的IFS演算法
theta=theta/2r=sqit(wx*wx+wy*wy)k=randrnd=k/RAND_MAXIFrnd<0.5THENr=sqrt(r)ELSEr=-sqrt(r)ENDIFx=r*cos(theta)y=r*sin(theta)ENDFOREND參考書:《分形演算法與程式設(shè)計(jì)》41第5
章逃逸時(shí)間演算法5.1基本思想
5.2Julia集的逃逸時(shí)間演算法
5.3Mandelbrot集的逃逸時(shí)間演算法5.4基於牛頓迭代的Julia集的逃逸時(shí)間演算法參考書:《分形演算法與程式設(shè)計(jì)》42逃逸時(shí)間演算法的基本思想F(z)=z2+c當(dāng)c=0時(shí),由於z是複數(shù),即z=x+yi,則有z2=z×z=(x+yi)×(x+yi)=x2+y2i2+2xyi=(x2-y2)+(2xy)i設(shè)複數(shù)z=x+yi的絕對(duì)值,即
|z|=SQR(x2+y2)|F(z0)|=|x02-y02+2x0y0i|=SQR((x02-y02)2+(2x0y0)2)=SQR(x04+y04-2x02y02+4x02y02)=SQR((x02+y02)2)=|z0|2若0<|z0|<1,|F(z0)|<|z0|,對(duì)於每一次迭代z趨向0,即z向0收斂。若|z0|>1,經(jīng)過迭代z會(huì)趨向無窮,z向無窮逃逸。若|z0|>1,
z是平面上的單位圓。5.1參考書:《分形演算法與程式設(shè)計(jì)》43逃逸時(shí)間演算法的基本思想
當(dāng)c≠0時(shí),其吸引子不再是0,而是一個(gè)區(qū)域,稱混沌區(qū)。如圖,假設(shè)有一個(gè)充分大的整數(shù)N,當(dāng)未逃逸區(qū)域M中的初始點(diǎn)a經(jīng)過小於N次迭代就達(dá)到未逃逸區(qū)域M的邊界,甚至超出了邊界,我們就認(rèn)為點(diǎn)a逃逸出去了;而如果經(jīng)過N次迭代後a的軌跡仍未到達(dá)M的邊界,我們就認(rèn)為,a是A上的點(diǎn)。用這樣的方法,描繪出A的邊界圖形,這便是逃逸時(shí)間演算法的基本思想。
5.1參考書:《分形演算法與程式設(shè)計(jì)》445.2Julia集的逃逸時(shí)間演算法
參考書:《分形演算法與程式設(shè)計(jì)》455.2Julia集的逃逸時(shí)間演算法
演算法:Julia標(biāo)題:Julia集的逃逸時(shí)間演算法參數(shù):K(逃逸時(shí)間)
m(逃逸半徑)
Mx,My(繪圖範(fàn)圍)
xs,xl,ys,yl(窗口範(fàn)圍)
p,q(複平面上C的座標(biāo))變數(shù):x0,y0(座標(biāo)變數(shù))
r(膜變數(shù))函數(shù):SetP(x,y,color)(畫點(diǎn)函數(shù))
BEGIN//初始化
K=100m=500Mx=800My=600xs=-1.5xl=1.5ys=-1.5yl=1.5p=0.23q=0.043xb=(xl-xs)/Mxyb=(yl-ys)/My參考書:《分形演算法與程式設(shè)計(jì)》465.2Julia集的逃逸時(shí)間演算法
FORnx=0TOMx
FORny=0TOMyx0=xs+nx*xby0=ys+ny*ybk=0Loop1:xk=x0*x0-y0*y0+pyk=2*x0*y0+qk=k+1r=xk*xk+yk*ykx0=xky0=yk
IFr>mTHENH=k;gotoLoop2
ENDIF
IFk==KTHENH=r
GOTOLoop2
ENDIF
IFr<=m&&k<KTHEN
GOTOLoop1
ENDIF
Loop2:SetP(nx,ny,H)
ENDFOR
ENDFOREND參考書:《分形演算法與程式設(shè)計(jì)》47參考書:《分形演算法與程式設(shè)計(jì)》485.3Mandelbrot集的逃逸時(shí)間演算法
演算法:Mandelbrot標(biāo)題:Mandelbrot集的逃逸時(shí)間演算法參數(shù):K(逃逸時(shí)間)
m(逃逸半徑)
Mx,My(繪圖範(fàn)圍)
xs,xl,ys,yl(窗口範(fàn)圍)
p,q(複平面上C的座標(biāo))變數(shù):x0,y0(座標(biāo)變數(shù))
r(膜變數(shù))函數(shù):SetP(x,y,color)(畫點(diǎn)函數(shù))
BEGINpl=0.9ps=2.3ql=1.2qs=-1.2K=100m=500Mx=800My=600p=(pl-ps)/Mxq=(ql-qs)/My
FORnp=0TOMx
FORnq=0TOMyp0=ps+np*pq0=qs+nq*qk=0參考書:《分形演算法與程式設(shè)計(jì)》495.3Mandelbrot集的逃逸時(shí)間演算法
x0=0y0=0Loop1:xk=x0*x0-y0*y0+p0yk=2*x0*y0+q0k=k+1r=xk*xk+yk*ykx0=xky0=yk
IFr>mTHENH=kGOTOLoop2
ENDIF
IFr<=mANDk<KTHEN
GOTOLoop1
ENDIFLoop2:SetP(np,nq,H)
ENDFOR
ENDFOREND參考書:《分形演算法與程式設(shè)計(jì)》50參考書:《分形演算法與程式設(shè)計(jì)》515.4基於牛頓迭代的Julia集的逃逸時(shí)間演算法
牛頓迭代法求根公式:zn+1=zn-f(zn)/f’(zn)
其中,f’(zn)是f(zn)的導(dǎo)數(shù)??紤]f(z)=z3-1=0的情況,那麼相應(yīng)的牛頓變換是f(z)=(2z3+1)/3z2則z的三個(gè)根分別是w1=1,w2=ei2π/3,w3=ei4π/3,三個(gè)根的吸引域A(w1),A(w2),A(w3)的交界便是牛頓函數(shù)的Julia集。經(jīng)過迭代,在A(wi)上的點(diǎn)都會(huì)被吸引到點(diǎn)wi上。設(shè)一個(gè)較大的迭代次數(shù)N,以及一個(gè)距離小量r,當(dāng)?shù)螖?shù)達(dá)到N,其與根點(diǎn)的距離小於r的被認(rèn)為是收斂到某根上了,否則被認(rèn)為是逃逸了。參考書:《分形演算法與程式設(shè)計(jì)》525.4基於牛頓迭代的Julia集的逃逸時(shí)間演算法
演算法:Julia_Newton標(biāo)題:Julia集的牛頓迭代逃逸時(shí)間演算法參數(shù):N(迭代次數(shù))
r(距離小量)
Mx,My(繪圖範(fàn)圍)
xs,xl,ys,yl(窗口範(fàn)圍)
p,q(複平面上C的座標(biāo))變數(shù):x0,y0(座標(biāo)變數(shù))
r(膜變數(shù))函數(shù):SetP(x,y,color)(畫點(diǎn)函數(shù))
BEGINfnm(x,y)=x*x+y*y
FORi=-150TO150
FORj=-150TO150x=i/75y=i/75
FORk=1TOn
IFi=0ANDj=0THEN
GOTOLoop
ENDIF
IFfnm(x-1,y)<rTHENSetP(i,j)
GOTOLoop
ENDIFfm=3*fnm(x,y)*fnm(x,y)參考書:《分形演算法與程式設(shè)計(jì)》535.4基於牛頓迭代的Julia集的逃逸時(shí)間演算法
nx=2*x/3+(x*x-y*y)/fmny=2*y/3-2*x*y/fmx=nxy=ny
ENDFORLoop
ENDFOR
ENDFOREND參考書:《分形演算法與程式設(shè)計(jì)》54第6
章分形顯微鏡6.1逃逸時(shí)間演算法的放縮原理6.2Mandelbrot集的局部放大6.3Julia集的局部放大
6.4牛頓迭代法的局部放大6.5作為Julia集字典的Mandelbrot集參考書:《分形演算法與程式設(shè)計(jì)》55逃逸時(shí)間演算法的放縮原理6.1參考書:《分形演算法與程式設(shè)計(jì)》566.2Mandelbrot集的局部放大
BEGINdp=(pmax-pmin)/(w_right-w_left)dq=(qmax-qmin)/(w_bottom-w_top)FORi=w_leftTOw_rightp=pmin+dp*i;FORj=w_topTOw_bottomx0=0y0=0q=qmin+dq*jFORk=0TOm_times x=x0*x0-y0*y0+py=2*x0*y0+qr=x*x+y*yx0=xy0=y演算法:Mandelbrot_zoom標(biāo)題:Mandelbrot集的局部放大參數(shù):m_times(逃逸時(shí)間)
m_deep(逃逸半徑)變數(shù):pmin,qmin
(參數(shù)窗口左上角座標(biāo))
pmax,qmax
(參數(shù)窗口右下角座標(biāo))
w_left,w_top
(繪圖窗口左上角座標(biāo))
w_right,w_bottom
(繪圖窗口右下角座標(biāo))
p,q(參數(shù)座標(biāo))
x,y(繪圖座標(biāo))
x0,y0(繪圖座標(biāo))
r(極距)函數(shù):SPost(x,y,color)
(畫點(diǎn))參考書:《分形演算法與程式設(shè)計(jì)》576.2Mandelbrot集的局部放大
IF(r>m_deep)THENbreakIF(k>=m_times)THENk=rSPost(i,j,k);ENDFORENDFORENDFOREND 參考書:《分形演算法與程式設(shè)計(jì)》586.3Julia集的局部放大BEGINdp=(pmax-pmin)/(w_right-w_left)dq=(qmax-qmin)/(w_bottom-w_top)FORi=w_leftTOw_rightp=pmin+dp*i;FORj=w_topTOw_bottomx0=pmin+dp*i;y0=qmin+dq*j;q=qmin+dq*jFORk=0TOm_times x=x0*x0-y0*y0+py=2*x0*y0+qr=x*x+y*yx0=xy0=y演算法:Julia_zoom標(biāo)題:Julia集的局部放大參數(shù):m_times(逃逸時(shí)間)
m_deep(逃逸半徑)變數(shù):pmin,qmin
(參數(shù)窗口左上角座標(biāo))
pmax,qmax
(參數(shù)窗口右下角座標(biāo))
w_left,w_top
(繪圖窗口左上角座標(biāo))
w_right,w_bottom
(繪圖窗口右下角座標(biāo))
p,q(參數(shù)座標(biāo))
x,y(繪圖座標(biāo))
x0,y0(繪圖座標(biāo))
r(極距)函數(shù):SPost(x,y,color)
(畫點(diǎn))參考書:《分形演算法與程式設(shè)計(jì)》596.3Julia集的局部放大IF(r>m_deep)THENbreakIF(k>=m_times)THENk=rSPost(i,j,k);ENDFORENDFORENDFOREND 參考書:《分形演算法與程式設(shè)計(jì)》606.4牛頓迭代法的局部放大BEGINdp=(pmax-pmin)/(w_right-w_left)dq=(qmax-qmin)/(w_bottom-w_top)FORi=w_leftTOw_rightFORj=w_topTOw_bottomx=pmin+dp*i;y=qmin+dq*j;count=0;WHILE(count<N)xx=x*x yy=y*y d=3*((xx-yy)*(xx-yy)+4*xx*yy) tmp=x; x=(2/3)*x+(xx-yy)/dy=(2/3)*y-2*tmp*y/d count=count+1; ENDWHILE演算法:Newton_zoom標(biāo)題:Newton法的局部放大參數(shù):m_times(逃逸時(shí)間)
m_deep(逃逸半徑)變數(shù):pmin,qmin
(參數(shù)窗口左上角座標(biāo))
pmax,qmax
(參數(shù)窗口右下角座標(biāo))
w_left,w_top
(繪圖窗口左上角座標(biāo))
w_right,w_bottom
(繪圖窗口右下角座標(biāo))
p,q(參數(shù)座標(biāo))
x,y(繪圖座標(biāo))
xx,yy(繪圖座標(biāo))
d(極距)函數(shù):SPost(x,y,color)
(畫點(diǎn))參考書:《分形演算法與程式設(shè)計(jì)》616.4牛頓迭代法的局部放大IF(x>0)THENcolor=countELSEIF(x<-0.3)AND(y>0.0)THENcolor=count+100ELSEcolor=count+200ENDIFENDFORENDFOREND 參考書:《分形演算法與程式設(shè)計(jì)》626.5作為Julia集字典的Mandelbrot集
Julia集是一個(gè)固定的值的圖形展現(xiàn),而Mandelbrot集卻要走遍所有的值,顯然,每一個(gè)值都對(duì)應(yīng)一個(gè)Julia集,所以我們說Mandelbrot集是Julia集微縮字典。我們可以在Mandelbrot集的繪圖空間中任意取一點(diǎn),並將其還原成相應(yīng)的值,再將此值作為Julia集程式中選定的值,來繪製Julia集的圖形。dp=(pl-ps)/Mxdq=(ql-qs)/MyDrawJulia(ps+dp*point.x,qs+dq*point.y)參考書:《分形演算法與程式設(shè)計(jì)》63第7
章分形演化演算法7.1從邏輯運(yùn)算談起7.2一維元胞自動(dòng)機(jī)7.3二維元胞自動(dòng)機(jī)7.4分形演化的DLA模型7.5用DLA模型模擬植物的生長(zhǎng)7.6不同初始條件的DLA形態(tài)參考書:《分形演算法與程式設(shè)計(jì)》64參考書:《分形演算法與程式設(shè)計(jì)》65從邏輯運(yùn)算談起7.1邏輯異或
本行:00011011下一行:0110
參考書:《分形演算法與程式設(shè)計(jì)》667.2一維元胞自動(dòng)機(jī)元胞按等間隔方式分佈在一條向兩側(cè)無限延伸的直線中,稱為一維元胞自動(dòng)機(jī)。
本行:001100其他下一行:110參考書:《分形演算法與程式設(shè)計(jì)》677.2一維元胞自動(dòng)機(jī)演算法:cell_one標(biāo)題:一維元胞自動(dòng)機(jī)參數(shù):n(水準(zhǔn)方向最大值)
m(垂直方向最大值)變數(shù):i,j(迴圈變數(shù))
y1[](本行元胞數(shù)組)
y2[](下一行元胞數(shù)組)函數(shù):SPost(x,y,color)
(畫點(diǎn))BEGIN
FORi=1TOm
FORj=1TOn
IFy1[j-1]=0ANDy1[j]=0ANDy1[j+1]=1THENy2[j]=1
ELSEIFy1[j-1]=1ANDy1[j]=0ANDy1[j+1]=0THENy2[j]=1
ELSEy2[j]=0
ENDIF
IFy2[j]=1THENSPost(x,y,color)
ENDIFENDFORENDFOREND參考書:《分形演算法與程式設(shè)計(jì)》687.3二維元胞自動(dòng)機(jī)在一個(gè)二維網(wǎng)格中,如果拋下一粒種子(元胞著色),然後考察一下種子身邊的格子中的元胞狀態(tài)會(huì)發(fā)生什麼事情。給一個(gè)規(guī)則,即每一個(gè)格子的狀態(tài),由其周圍的八個(gè)格子的狀態(tài)(0或1)來決定,如果它周圍八個(gè)格子中的狀態(tài)值相加為奇數(shù)時(shí),則此格子下一個(gè)狀態(tài)為1;如果它周圍八個(gè)格子中的狀態(tài)值相加為偶數(shù)時(shí),則此格子下一個(gè)狀態(tài)為0。就這樣一步一步演化下去,會(huì)看到圖案。參考書:《分形演算法與程式設(shè)計(jì)》697.3二維元胞自動(dòng)機(jī)演算法:cell_two標(biāo)題:二維元胞自動(dòng)機(jī)參數(shù):n(元胞的範(fàn)圍)變數(shù):i,j(迴圈變數(shù))
a[][](本步元胞數(shù)組)
b[][](下一步元胞數(shù)組)函數(shù):SPost(x,y,color)
(畫點(diǎn))BEGIN
FORi=1TOn
FORj=1TOn
k=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1] +a[i][j-1]+a[i][j+1]+a[i+1][j1]
+a[i+1][j]+a[i+1][j+1]
IFkmod2=1THENb[i][j]=1
ELSEb[i][j]=0
ENDIFENDFORENDFOREND參考書:《分形演算法與程式設(shè)計(jì)》707.4分形演化的DLA模型
自然界中有很多種這樣的生長(zhǎng)集團(tuán)參考書:《分形演算法與程式設(shè)計(jì)》717.4分形演化的DLA模型
演算法:DLA標(biāo)題:DLA模型參數(shù):BAX,BAY(基點(diǎn)座標(biāo))
m(垂直方向最大值)變數(shù):r0(凝聚半徑)
r(釋放粒子的半徑)
rmax(粒子逃逸半徑)
cyt,cyb,cyl,cyr
(遊走粒子周圍4點(diǎn))函數(shù):SPost(x,y,color)
(畫點(diǎn))
getpixel(x,y)(獲取點(diǎn))
read()(隨機(jī)函數(shù))
sgn()
(符號(hào)函數(shù))BEGINr0=5
WHILE(n<1000)r=r0+5rmax=r0+5rx=(2*r+1)*read()-rrv=r-abs(rx)ry=rv*sgn(read()-0.5)x=rxy=ry
FOR(;;)xb=xyb=ydist=abs(x)+abs(y)cyt=getpixel(x+BAX,y+BAY+1)cyb=getpixel(x+BAX,y+BAY-1)cyl=getpixel(x+BAX-1,y+BAY)cyr=getpixel(x+BAX+1,y+BAY)參考書:《分形演算法與程式設(shè)計(jì)》727.4分形演化的DLA模型
twd[1]=0twd[2]=0twd[(2*read())+1]=sgn(read()-0.5)x=x+twd[1]y=y+twd[2]SPost(x+BAX,y+BAY,white)SPost(x+BAX,y+BAY,red)ENDFORENDWH
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年天津市安全員知識(shí)題庫(kù)
- 重慶工程職業(yè)技術(shù)學(xué)院《朗讀與講故事指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西南民族大學(xué)《古生物學(xué)含實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京農(nóng)業(yè)大學(xué)《教育評(píng)價(jià)與測(cè)量》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱劍橋?qū)W院《廣告創(chuàng)意與策劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西體育高等??茖W(xué)?!峨姶艌?chǎng)理論與光波導(dǎo)技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆河南省周口市西華縣三校聯(lián)考高三上學(xué)期一模歷史試卷
- 贛南師范大學(xué)《幼兒園體育游戲》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇聯(lián)合職業(yè)技術(shù)學(xué)院《分子生物學(xué)(英文)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州城建職業(yè)學(xué)院《銷售管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年河北省邢臺(tái)市公開招聘警務(wù)輔助人員(輔警)筆試專項(xiàng)訓(xùn)練題試卷(2)含答案
- 家政公司服務(wù)員考試題庫(kù)單選題100道及答案解析
- 人工智能:AIGC基礎(chǔ)與應(yīng)用 課件 實(shí)訓(xùn)項(xiàng)目九 使用度加創(chuàng)作工具和剪映進(jìn)行智能化短視頻創(chuàng)作
- 《日影的朝向及長(zhǎng)短》課件
- 中職普通話教師教案模板
- 施工后期的場(chǎng)地恢復(fù)措施
- 七年級(jí)歷史下冊(cè) 第一單元 隋唐時(shí)期繁榮與開放的時(shí)代 第1課 隋朝的統(tǒng)一與滅亡說課稿1 新人教版
- 智能教育機(jī)器人AI項(xiàng)目策劃創(chuàng)業(yè)計(jì)劃書
- 《MATLAB編程及應(yīng)用》全套教學(xué)課件
- T-CCSAS 001-2018 危險(xiǎn)與可操作性分析(HAZOP分析)質(zhì)量控制與審查導(dǎo)則
- 2025年春人教版九年級(jí)英語(yǔ)下冊(cè) 2025年中考模擬測(cè)試卷
評(píng)論
0/150
提交評(píng)論