aUCBLogo Demos and Tests / ifs_alnum


to ifs_alnum [mytext 1234]   
   
;I_terative F_unction S_ystem alpha-numeric drawings
   
maxi2=16
   
maxi2Move=12
   
maxi=Int 2^maxi2
   
trafomode=true
   
palsize=256
   
pal=IntArray loadpalette "ifs.pal
   
on=1
   
data=[]
   
initAlphabet mytext
   
initGraph
   
demoNr=1
   
odemoNr=1
   
   
Ntrafo=Int count data.demoNr.2
   
dat=deepCopy data.odemoNr
   
Ntrafo=Int lcm Ntrafo count dat.2
   
dat.7=Ntrafo/count dat.2
   
dat.8=240/count dat.2
   
dat.2=enlarge dat.2 Ntrafo
   
dat.3=enlarge dat.3 Ntrafo
   
p=dat.2
   
d=dat.3
   
sk=dat.4
   
x0=dat.5
   
y0=dat.6
   
cf=dat.7
   
cf2=dat.8
   
initProbabilities
   
x=rSeqFA 0 0 maxii
   
y=rSeqFA 0 0 maxii
   
for [runnr 1 10]
   
[   IFSiterate
   
]
end

be initAlphabet mytext
   
a=
   
{   {1  90  6 .0  -0.55 1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .15 -1    1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-30  5 .45 -1    1 } 
      
{-90 10 .6  -0.6  1 }
   
}
   
c=
   
{   {1  90  6 .0  -0.55 1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .15 -1    1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-30  5 .45 -1    1 } 
   
}
   
d=
   
{   {1  90  6 .0  -0.55 1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .15 -1    1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-30  5 .45 -1    1 } 
      
{-90 25 .6   0    .3}
   
}
   
e=
   
{   {1  90  6 .0  -0.55 1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .15 -1    1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-30  5 .45 -1    1 } 
      
{1   0  8 .25 -0.55 1 }
      
{-90  4 .6  -0.4  1 }
   
}
   
g=
   
{   {1  90  6 .0  -0.55 1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .15 -1    1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-30  5 .45 -1    1 } 
      
{-90 18 .6  -1    1 }
      
{-30  5 .45 -2    1 } 
      
{1  30  5 .15 -2    1 } 
   
}
   
h=
   
{   {-90 25 .0   0    .3} 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{1  90 10 .6  -0.6  .6}
   
}
   
i=
   
{   {-90 10 .3  -0.5  1 } 
      
{1   0  5 .3  -1    1 } 
      
{1   0  2 .3   0.5  1 } 
      
{-90  2 .3   0.5  1 } 
      
{-45  2 .3   0.5  1 } 
      
{1  45  2 .3   0.5  1 } 
   
}
   
l=
   
{   {-90 17 .1   0    .5} 
      
{1  30  5 .25 -1    1 } 
      
{-30  5 .55 -1    1 } 
   
}
   
n=
   
{   {1  90 10 .0  -0.5  1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-90  7 .6  -0.6  1 }
   
}
   
o=
   
{   {1  90  6 .0  -0.55 1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .15 -1    1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-30  5 .45 -1    1 } 
      
{-90  6 .6  -0.55 1 }
   
}
   
r=
   
{   {1  90 10 .0  -0.5  1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .45 -0.1  1 } 
   
}
   
s=
   
{   {1  90  3 .0  -0.35 1 } 
      
{-30  5 .15 -0.1  1 } 
      
{1  30  5 .15 -1    1 } 
      
{1  30  5 .45 -0.1  1 } 
      
{-30  5 .45 -1    1 } 
      
{-90  3 .6  -0.75 1 }
      
{1  15  8 .3  -0.5  1 }
   
}
   
A=
   
{   {-75 25 .05  0    .3} 
      
{1  75 25 .55  0    .3} 
      
{1   0 10 .3  -0.3  1 } 
   
}
   
B=
   
{   {1  90 18 .0   0    1 } 
      
{1   0  6 .1   1    1 } 
      
{1  30  5 .45  0.9  1 } 
      
{1   0  6 .1  -1    1 } 
      
{-30  5 .45 -0.9  1 } 
      
{-90  6 .6   0.45 1 } 
      
{-90  6 .6  -0.55 1 } 
      
{1   0  6 .1   0    1 } 
      
{-30  5 .45  0.1  1 } 
      
{1  30  5 .45 -0.1  1 } 
   
}
   
C=
   
{   {1  90 18 .0   0    .5} 
      
{1  30  6 .1  -1    1 } 
      
{-30  6 .4  -1    1 } 
      
{-30  6 .1   1    1 } 
      
{1  30  6 .4   1    1 } 
   
}
   
I=
   
{   {-90 20 .3   0    .5} 
   
}
   
L=
   
{   {1  90 18 .1   0    .5} 
      
{1   0 12 .4  -1    1 } 
   
}
   
M=
   
{   {1  90 25  0   0    .3} 
      
{1  75 10 .3   0.4  .5} 
      
{-75 10 .5   0.4  .5} 
      
{-90 25 .8   0    .3} 
   
}
   
U=
   
{   {1  90 18 .0   0    .5} 
      
{1  30  6 .1  -1    1 } 
      
{-30  6 .5  -1    1 } 
      
{-90 18 .6   0    .5}
   
}
   
_0=
   
{   {1  90 20 .0   0    .5} 
      
{1  30  6 .2  -1    1 } 
      
{-30  6 .5  -1    1 } 
      
{-30  6 .2   1    1 } 
      
{1  30  6 .5   1    1 } 
      
{-90 20 .7   0    .5} 
   
}
   
_1=
   
{   {-90 25 .3   0    .5} 
      
{-60  7 .0   .75  1 } 
   
}
   
_2=
   
{   {1   0 10 .3  -1    1 } 
      
{-30  6 .2   1    1 } 
      
{1  30  6 .5   1    1 } 
      
{-60 22 .3  -.2   .5} 
   
}
   
_3=
   
{   {1  30  6 .2  -1    1 } 
      
{-30  6 .5  -1    1 } 
      
{-90  8 .7  -0.5  1 } 
      
{-30  6 .2   1    1 } 
      
{1  30  6 .5   1    1 } 
      
{-90  8 .7   0.5  1 } 
      
{1   0  6 .3   0    2 } 
   
}
   
_4=
   
{   {-90 25 .5   0    .5} 
      
{-60 10 .0   .5   1 } 
      
{1   0 10 .3   0    1 } 
   
}
   
_5=
   
{   {1  30  6 .2  -1    1 } 
      
{-30  6 .5  -1    1 } 
      
{-90  8 .7  -0.5  1 } 
      
{1   0  8 .3   1    1 } 
      
{-90  8 .0   0.5  1 } 
      
{1   0  6 .3   0    2 } 
   
}
   
_6=
   
{   {1  30  6 .2  -1    1 } 
      
{-30  6 .5  -1    1 } 
      
{-90  8 .7  -0.5  1 } 
      
{-30  8 .3   0.8  1 } 
      
{-90 16 .0  -0.2  .6} 
      
{1   0  6 .3   0    2 } 
   
}
   
_7=
   
{   {1   0 10 .3   1    1 } 
      
{-60 22 .3  -.2   .5} 
   
}
   
_8=
   
{   {1  30  6 .2  -1    1 } 
      
{-30  6 .5  -1    1 } 
      
{-90  8 .0  -0.5  1 } 
      
{1  90  8 .7  -0.5  1 } 
      
{-30  6 .2   1    1 } 
      
{1  30  6 .5   1    1 } 
      
{-90  8 .0   0.5  1 } 
      
{1  90  8 .7   0.5  1 } 
      
{1   0  6 .3   0    2 } 
   
}
   
_9=
   
{   {1  30  6 .2  -1    1 } 
      
{-30  6 .5  -1    1 } 
      
{1  90  8 .7  -0.5  1 } 
      
{-30  6 .2   1    1 } 
      
{1  30  6 .5   1    1 } 
      
{-90  8 .0   0.5  1 } 
      
{1  90  8 .7   0.5  1 } 
      
{1   0  6 .3   0    2 } 
   
}
   
trafos={}
   
indexlist=[]
   
newlines=[]
   
foreach mytext
   
[   ifelse ?=="
      [   newlines=lput (last indexlistnewlines
      
][   ifelse number? ?
         
[   trafos=combine trafos thing word "_ ?
         
][   trafos=combine trafos thing ?
         
]
      
]
      
indexlist=lput count trafos indexlist
   
]
   
newlines=lput count trafos newlines
   
len=count trafos
   
da=Array len
   
pa=Array len
   
xar=Array len
   
yar=Array len
   
xindex=0
   
yindex=first newlines
   
x0=0
   
y0=0
   
for [it len]
   
[   da.it=FloatArray 6
      
if it xindex
      
[   x0=x0+1
         
xindex=first indexlist
         
indexlist=butFirst indexlist
      
]
      
if it yindex
      
[   y0=y0-2
         
x0=1
         
newlines=butFirst newlines
         
yindex=first newlines
         
xindex=first indexlist
         
indexlist=butFirst indexlist
      
]
      
xar.it=x0
      
yar.it=y0
   
]
   
xmax=(max xar+1)
   
xar2=(xar-xmax/2)
   
yar2=(yar-(min yar)/2)
   
xf=8/xmax
   
for [it len]
   
[   ti=Array trafos.it
      
di=da.it
      
ti.3ti.3/100
      
di.1xf  *ti.3cos ti.2
      
di.2ti.6*ti.3sin ti.2
      
di.3xf  *ti.3*(sin ti.2)*(-1)
      
di.4ti.6*ti.3cos ti.2
      
di.5ti.4*0.8+xar2.it
      
di.6ti.5*0.8+yar2.it
      
da.it=di
      
pa.it=trafos.it.1
   
]
   
dat=(list [][][][][][][][])
   
dat.1=(list mytext)
   
dat.2=pa
   
dat.3=da
   
dat.4=170   ;sk
   
dat.5=0      ;x0
   
dat.6=0      ;y0
   
dat.7=1      ;cf
   
dat.8=1      ;cf2
   
push "data dat
end   

to transposeArray a
   
local [l l2 b]
   
l=count a
   
l2=count a.1
   
b=Array l2
   
for [l2]
   
[   tmp=FloatArray l
      
for [l]
      
[   tmp.j=a.j.i         
      
]
      
b.i=tmp
   
]
   
output b
end

to enlarge p N
   
local [pn p2 f]
   
pn=count p
   
p2=Array N
   
f=pn/N
   
for [N]
   
[   p2.i=p.(1+Int (i-1)*f)
   
]
   
output p2
end

to initProbabilities
   
(reRandom 0)
   
   
n=count p
   
p0=0
   
for [n]
   
[   p.i=p0+p.i
      
p0=p.i
   
]
   
p=p/(max p)
   
pa=Array maxi2
   
pai=Int (ln n)/ln 2
   
for [l pai maxi2]
   
[   l2=2^l
      
pat=IntArray l2
      
k=1
      
for [n]
      
[   kmax=Int p.i*l2
         
if kmax >= k
         
[   setItems k pat IntArray rseq i i kmax-k+1
;            for [j k kmax]
;            [   
;(show j i)
;               pat.j=i
;            ]
         
]
         
k=kmax+1
      
]
      
pa.l=pat
;show p
;show pa.l
      
pa.l=shuffle pa.l
;show pa
   
]
   
maxii=Int 2^pai
   
   
m=count d
   
d1=FloatArray m
   
d2=FloatArray m
   
d3=FloatArray m
   
d4=FloatArray m
   
d5=FloatArray m
   
d6=FloatArray m
   
for [m]
   
[   d1.i=(d.i).1
      
d2.i=(d.i).2
      
d3.i=(d.i).3
      
d4.i=(d.i).4
      
d5.i=(d.i).5
      
d6.i=(d.i).6
   
]
end

to shuffle_Logo a
   
local [n j k tmp]
   
n=count a
   
for [n]
   
[   j=1+random n
      
k=1+random n
      
tmp=a.j
      
a.j=a.k
      
a.k=tmp
   
]
end

to initGraph
   
ht 
   
PenUp
   
setXY -400 -300
   
bm=BitCopy 800 600
   
bx=BitMaxX bm
   
by=BitMaxY bm
   
t=16
   
PenDown
end   

to IFSiterate
   
local [p]
   
p=pa.pai
   
for [1 2]
   
[   xxd1.p*d2.p*d5.p
      
yyd3.p*d4.p*d6.p

      
xixx*sk+x0
      
yiyy*sk+y0

      
ifelse trafomode
      
[   setPixelXY xi yi 
;            IntArray (mod (FloatArray (p-1))/cf 15)+1
            
pal.(IntArray 
            
(FloatArray (IntArray (FloatArray p-1)/cf))
            
*cf2+15)
      
][
         
setPixelXY xi yi pal.Int t
      
]
      
ox=x
      
oy=y
      
x=xx
      
y=yy
      
p=rotate p random maxii
      
t=(mod t palsize)+1
   
]
   
pa.pai=p
   
ifelse pai maxi2 
   
[   pai=pai+1 
      
maxii=maxii*2
      
x=combine x ox
      
y=combine y oy
   
][
      
updateGraph
      
dispatchMessages
   
]
end