% worm.m4 % define(`setfillcolour',`ifdef(`pstricks_', `m4v = max(max(`$1',`$2'),`$3') command sprintf("\definecolor{fcolor}{rgb}{%0.4f, %0.4f, %0.4f}",\ (`$1')/m4v, (`$2')/m4v, (`$3')/m4v) \pscustom[fillcolor=fcolor,fillstyle=solid]{', `ifdef(`gpic_',`m4v = sqrt((`$1')^2+(`$2')^2+(`$3')^2)/sqrt(3) command sprintf("\special{sh %g}",1-m4v)')') ') % .PS linethick_(0) dimen = 1.25 # scale parameter; try dimen=2 for a larger picture r = 0.15 * dimen # worm radius S: dimen,0 for i = 1 to 360 do { R: dimen*cosd(3*i), dimen*sind(2*i) D: R-(S.x,S.y) h = sqrt(max(0,r^2/(D.x^2+D.y^2)-1/4)) Ra: 0.5 + (h*D.y,-h*D.x) Rb: 0.5 - (h*D.y,-h*D.x) setfillcolour( (1+sind(2*i))/2, (1+sind(i))/2, (1+sind(3*i))/2 ) arc cw from Ra to Rb rad r with .c at S arc ccw from Rb to Ra rad r with .c at R ifdef(`pstricks_',`\relax}') S:R } .PE