Nadesłany przez Krzysztof Bruszewski, 12 marca 2013 23:49
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
ifs.r:
#Systemy funkcji iterowanych #www.algorytm.org SmokHeighwaya<- function(x,y,l){ smok<-mat.or.vec(l, 2) r=runif(l) for (i in 1:l){ if (r[i] < 0.5){ xp=-0.4*x-1 yp=-0.4*y+0.1 smok[i,1]=xp smok[i,2]=yp x=xp y=yp } if (r[i] >= 0.5){ xp=0.76*x-0.4*y yp=0.4*x+0.76*y smok[i,1]=xp smok[i,2]=yp x=xp y=yp } } return(smok) } PaprocBarnsleya<- function(x,y,l){ paproc<-mat.or.vec(l, 2) p<-85+7+7+1 r=sample(1:p, l, replace=T) for (i in 1:l){ if (r[i] >= 16 & r[i] <= 100 ){ xp=0.85*x+0.04*y yp=-0.04*x+0.85*y+1.6 paproc[i,1]=xp paproc[i,2]=yp x=xp y=yp } if (r[i] >= 9 & r[i] <= 15 ){ xp=-0.15*x+0.28*y yp=0.26*x+0.24*y+0.44 paproc[i,1]=xp paproc[i,2]=yp x=xp y=yp } if (r[i] >= 2 & r[i] <= 8 ){ xp=0.20*x-0.26*y yp=0.23*x+0.22*y+1.6 paproc[i,1]=xp paproc[i,2]=yp x=xp y=yp } if (r[i] == 1){ xp=0.0 yp=0.16*y paproc[i,1]=xp paproc[i,2]=yp x=xp y=yp } } return(paproc) } s<-SmokHeighwaya(1,1,100000) p<-PaprocBarnsleya(1,1,100000) sx<-s[,1] sy<-s[,2] px<-p[,1] py<-p[,2] par(mfrow=c(1,2)) plot(sx,sy, pch=16, cex=0.2, ,col="red", main="Smok Heighwaya") plot(px,py, pch=16, cex=0.2,,col="green", main="Paproć Barnsleya")