Blob Farm # blob42 The blob in all its glory: Maybe a case for a Doll scale science fiction appliance.

 Click on the snapshot to download the blob's stl file. Octave Code:
```  # name of the blob
project = "blob42";

function w = f(x,y,z,c,r,e)

# function at origin must be <0, and >0 far enough away.  w=0 defines the surface

w = (  0.8*abs((x-c(1))/r(1)).^5 ...
-((x-c(1))/r(1)).^4 + ((y-c(2))/r(2)).^2 ).^2 + 1* ((z-c(3))/r(3)).^2 - 0.09*(1+x/1000);

endfunction;

# this is for distorting the grid before applying the function
# note that the undistorted grid will be used to make the stl file
# just set it to x3=x; y3=y; z3=z; if no warping is needed.
function [x3,y3,z3]= prewarp(x,y,z)
R =2800;  # center of sphere is at (R+X0,0,0) with radius R (passing through (X0,0,0) )
X0 = 60; # this means that parts of the blob near [X0,0,0] will stay near that point.
# calculate the inverted coordinate of each point in the 3D grid (x3,y3,z3)
x2 = x-R-X0;  y2=y;   z2 = z; # intermediate values
r2 = R*R./(x2.^2+y2.^2+z2.^2);
x3 = x2.*r2+R+X0;  y3 = y2.*r2;  z3 = z2.*r2;
endfunction;

step = 10;  # grid pitch in mm  start with 4mm to see the shape quickly.  Once you have it just right, change to 2mm for printing

c_outer = [10,0,0];
r_outer = [200,200,300];

xmin = -200;
xmax = 400;
ymin = -200;
ymax = 200;
zmin = -140;
zmax = 140;

source("../octave/func2stl_v01.m");  # do all the calculations
```
GNU Octave