+ public class rWave {\r
+ float v0, a0, x0, t,damp,a;\r
+ boolean bDone=false;\r
+ final float len=8;\r
+ rWave(float _x0, float _a0, float _v0, float _damp) { x0=_x0*len; a0=_a0; v0=_v0; t=0; damp = _damp; }\r
+ void move(double deltaMs) {\r
+ t += deltaMs*.001;\r
+ if (t>4) bDone=true;\r
+ }\r
+ float val(float _x) {\r
+ _x*=len;\r
+ float dist = t*v0 - abs(_x-x0);\r
+ if (dist<0) { a=1; return 0; }\r
+ a = a0*exp(-dist*damp) * exp(-abs(_x-x0)/(.2*len)); // * max(0,1-t/dur)\r
+ return -a*sin(dist);\r
+ }\r
+ }\r