function f(x, y, t){
let phase1 = (.5+.5*Math.sin( t/15+0*Math.PI + .5*Math.sqrt(x**2+y**2) ))**2
let rippleWave = Math.cos(2*t + 25*Math.sqrt(.2+x**2+y**2) )
let phase2 = (.5+.5*Math.sin(t/15+.75*Math.PI - .5*Math.sqrt(x**2+y**2) ))**2
let spiralWave = (
Math.cos(
-2*t
+ 18*Math.sqrt(.2+x**2+y**2)
- 2*Math.atan((x+.001)/y)
)
*(x**2+y**2)/(x**2+y**2+.03)
+ 1 - (x**2+y**2)/(x**2+y**2+.03)
)
let phase3 = Math.max(0,1-phase1-phase2)
let inverseWave = Math.sin(20*(x*y)/Math.sqrt(1+x**2+y**2)-t)
return .13*phase1*rippleWave + .15*phase2*spiralWave + .2*phase3*inverseWave + .35
}