Here is a new version. 14 lines and smoother transitions between changes if the symmetry has changed.
Code: Select all
;*******************************************************************************
;*
;* July-August 2014 PurePunch contest
;* PureBasic 5.22
;* 50 lines of 80 chars, 2 months delay
;*
;* Name : Superformula
;* Author : NicTheQuick
;* Date : 13.07.2014
;* Notes : Only tested on PB 5.30 b7 on Linux x64!
;* You can also resize the window.
;* abcdefghijklmnopqrstuvwxyz
;* Variables: ^^^^^^^^^^ ^^^^^^^ ^^^^^^
;* Macros : ^ ^
;*******************************************************************************
w=600:h=600:Define.d a,b,c,d,e,n,o,p,r,t,x,y,z,q:If OpenWindow(0,0,0,w,h,"Supe"+
"rformel",#PB_Window_MaximizeGadget):CanvasGadget(0,0,0,w,h):Macro s(a):Sin(t*a)
EndMacro:l=999:Repeat:f=WindowWidth(0):g=WindowHeight(0):t=ElapsedMilliseconds()
v=WaitWindowEvent(10):If f!w|g!h:w=f:h=g:ResizeGadget(0,0,0,w,h):ElseIf t>u+20+
0 And StartDrawing(CanvasOutput(0)):If q<0:j=m:m=2+2*Random(20):q=1:EndIf:u=t
t/10000:q-0.005:c=10+9*s(2):d=9+9*s(3):a=Abs(s(7)*0.6)+0.1:b=Abs(s(11)*0.6)+0.1
e=9+9*s(5):GrabDrawingImage(0,0,0,w,h):x=150+100*s(1):y=Cos(t*9):n=w/2*(1+y)
DrawAlphaImage(ImageID(0),w*y/x,h*s(9)/x,99):DrawingMode(#PB_2DDrawing_Gradient)
o=h/2*(1+s(9)):LinearGradient(n,o,w-n,h-o):Macro k(a,b,c,d,e=127):a#Color(RGB(0+
e*(1+s(b)),e*(1+s(c)),e*(1+s(d)))):EndMacro:k(Front,2,3,5):k(Back,7,11,13)
Macro z(m):Pow(Pow(Abs(Cos(m*r/4)/a),d)+Pow(Abs(Sin(m*r/4)/b),e),1/c):EndMacro
For i=0 To l:r=i*2*#PI/l:p+s(1)/30000:z=q*z(j)+(1-q)*z(m):x=w/2*(Cos(r+p)/z+1)
y=h/2*(1+0.8*Sin(r+p)/z):If i:LineXY(n,o,x,y):EndIf:n=x:o=y:Circle(x,y,h*Bool(0+
i%(l/20)=0)/70/z):Next:StopDrawing():EndIf:Until v=#PB_Event_CloseWindow:EndIf
@RASHAD: "l" is the new "#n". Now it is 999 instead of 1000 because the line was too long.

For those who are interested in the "beautiful" code:
Code: Select all
;*******************************************************************************
;*
;* July-August 2014 PurePunch contest
;* PureBasic 5.22
;* 50 lines of 80 chars, 2 months delay
;*
;* Name : Superformula
;* Author : NicTheQuick
;* Date : 13.07.2014
;* Notes : Only tested on PB 5.30 b7 on Linux x64!
;* You can also resize the window.
;* abcdefghijklmnopqrstuvwxyz
;* Variables: ^^^^^^^^^^ ^^^^^^^ ^^^^^^
;* Macros : ^ ^
;*******************************************************************************
EnableExplicit
Macro s(a):Sin(t*a):EndMacro
Global l=999,w=600,h=600,i,v,m,f,g,u,j:Define.d a,b,c,d,e,n,o,p,r,t,x,y,z,q
If OpenWindow(0,0,0,w,h,"Superformel",#PB_Window_MaximizeGadget)
CanvasGadget(0,0,0,w,h)
Repeat
v=WaitWindowEvent(10)
t=ElapsedMilliseconds()
f=WindowWidth(0)
g=WindowHeight(0)
If f!w|g!h
w=f:h=g
ResizeGadget(0,0,0,w,h)
ElseIf t>u+20 And StartDrawing(CanvasOutput(0))
u=t
t/10000
If q<0
j=m
m=2+2*Random(20)
q=1
EndIf
q-0.005
c=10+9*s(2)
d=9+9*s(3)
e=9+9*s(5)
a=Abs(s(7)*0.6)+0.1
b=Abs(s(11)*0.6)+0.1
GrabDrawingImage(0,0,0,w,h)
x=150+100*s(1)
y=Cos(t*9)
DrawAlphaImage(ImageID(0),w*y/x,h*s(9)/x,99)
DrawingMode(#PB_2DDrawing_Gradient)
n=w/2*(1+y):o=h/2*(1+s(9)):LinearGradient(n,o,w-n,h-o)
Macro k(a,b,c,d,e=127)
a#Color(RGB(e*(1+s(b)),e*(1+s(c)),e*(1+s(d))))
EndMacro
k(Front,2,3,5)
k(Back,7,11,13)
For i=0 To l
r=i*2*#PI/l
p+s(1)/30000
Macro z(m)
Pow(Pow(Abs(Cos(m*r/4)/a),d)+Pow(Abs(Sin(m*r/4)/b),e),1/c)
EndMacro
z=q*z(j)+(1-q)*z(m)
x=w/2*(1+Cos(r+p)/z)
y=h/2*(1+Sin(r+p)/z)
If i:LineXY(n,o,x,y):EndIf
Circle(x,y,Bool(i%(l/20)=0)*h/70/z)
n=x:o=y
Next
StopDrawing()
EndIf
Until v=#PB_Event_CloseWindow
EndIf
