.PS # Egg.m4 # https://tex.stackexchange.com/questions/74168/how-can-i-draw-an-egg-using-tikz threeD_init NeedDpicTools define Eggshape { (0.78*cos(($2)/4)*sin($2),-cos($2))*($1) } # -pi < arg2 < pi size = 2 npts = 41 HL: Eggshape(size*0.4,-pi_*3/4) # Highlight P: Eggshape(size,pi_/4) d = zabs(P) nlines = int(d/lthick*1.5) # This way of blending colors is not the # simplest for a single postprocessor but it # works for multiple postprocessors, e.g. SVG define(`Orange',`1, 0.5, 0') define(`Gray', `0.5, 0.5, 0.5') define(`White', `1, 1, 1') define(`eggblend', `sum3D(sprod3D($1,Orange), sum3D(sprod3D($2,White), sprod3D($3,Gray)))') define(`normalize',`($1)/($1+$2+$3), ($2)/($1+$2+$3), ($3)/($1+$2+$3)') define EggLine { for i=0 to npts do { P[i]: HL*(1-($1))+Eggshape(size*($1),i/npts*twopi_-pi_) } fitcurve(P,npts,outlined rgbstring($2,$3,$4)) } ShadeObject(EggLine, nlines, 0, eggblend(normalize(0.3, 1, 0)), 0.2, eggblend(normalize(0.5, 0.5, 0)), 0.5, eggblend(normalize(0.5, 0.4, 0.2)), 1, eggblend(normalize(0.5, 0, 0.7)) ) .PE