Blob Farm

# blob66

The blob in all its glory:

This is a rather exciting shape. It is a boxy ellipsoid (superquadratic) that is inverted on another ellipsoid, not on a sphere. It has so much structure to it! I used Mathematica to algebraically derive its formula. I put that formula in GNU Octave to make the STL file. It was inspired by the paper: José L. Ramírez & Gustavo N. Rubiano (2017) A generalization of the spherical inversion, International Journal of Mathematical Education in Science and Technology, 48:1, 132-149, DOI: 10.1080/0020739X.2016.1201598

Octave Code:
```  # name of the blob
project = "blob66";

# function at origin must be <0, and >0 far enough away.  w=0 defines the surface
function w = f(x2,y2,z2,c,r)  # three lobed toroid with low profile bumps and flat top
x = (x2-c(1))/r(1);
y = (y2-c(2))/r(2);
z = (z2-c(3))/r(3);

w = (-0.958571).*((-66.7661).*x.^6+x.^12+1.03727.* ...
x.^10.*y+(-10.3727).*x.^8.*y.^2+24.0.*x.^10.*y.^2+ ...
0.553213E2.*x.^6.*y.^3+0.207455E2.*x.^8.*y.^3+(-0.165964E3).* ...
x.^4.*y.^4+(-165.964).*x.^6.*y.^4+240.*x.^8.*y.^4+ ...
265.542.*x.^2.*y.^5+663.855.*x.^4.*y.^5+165.964.*x.^6.*y.^5+ ...
(-177.028).*y.^6+(-1327.71).*x.^2.*y.^6+(-995.783).*x.^4.*y.^6+ ...
1280.*x.^6.*y.^6+1062.17.*y.^7+2655.42.*x.^2.*y.^7+ ...
663.855.*x.^4.*y.^7-2655.42.*y.^8-2655.42.*x.^2.*y.^8+ ...
0.384E4.*x.^4.*y.^8+0.354056E4.*y.^9+0.132771E4.*x.^2.* ...
y.^9+(-0.265542E4).*y.^10+0.6144E4.*x.^2.*y.^10+0.106217E4.*y.^11+ ...
0.4096E4.*y.^12+0.24E2.*x.^10.*z.^2+0.207455E2.*x.^8.*y.*z.^2+( ...
-0.165964E3).*x.^6.*y.^2.*z.^2+0.48E3.*x.^8.*y.^2.*z.^2+ ...
0.663855E3.*x.^4.*y.^3.*z.^2+0.331928E3.*x.^6.*y.^3.*z.^2+( ...
-0.132771E4).*x.^2.*y.^4.*z.^2+(-0.199157E4).*x.^4.*y.^4.*z.^2+ ...
0.384E4.*x.^6.*y.^4.*z.^2+0.106217E4.*y.^5.*z.^2+0.531084E4.* ...
x.^2.*y.^5.*z.^2+0.199157E4.*x.^4.*y.^5.*z.^2+(-0.531084E4).* ...
y.^6.*z.^2+(-0.796626E4).*x.^2.*y.^6.*z.^2+0.1536E5.*x.^4.*y.^6.* ...
z.^2+0.106217E5.*y.^7.*z.^2+0.531084E4.*x.^2.*y.^7.*z.^2+( ...
-0.106217E5).*y.^8.*z.^2+0.3072E5.*x.^2.*y.^8.*z.^2+0.531084E4.* ...
y.^9.*z.^2+0.24576E5.*y.^10.*z.^2+0.24E3.*x.^8.*z.^4+0.165964E3.* ...
x.^6.*y.*z.^4+(-0.995783E3).*x.^4.*y.^2.*z.^4+0.384E4.*x.^6.* ...
y.^2.*z.^4+0.265542E4.*x.^2.*y.^3.*z.^4+0.199157E4.*x.^4.*y.^3.* ...
z.^4+(-0.265542E4).*y.^4.*z.^4+(-0.796626E4).*x.^2.*y.^4.*z.^4+ ...
0.2304E5.*x.^4.*y.^4.*z.^4+0.106217E5.*y.^5.*z.^4+0.796626E4.* ...
x.^2.*y.^5.*z.^4+(-0.159325E5).*y.^6.*z.^4+0.6144E5.*x.^2.*y.^6.* ...
z.^4+0.106217E5.*y.^7.*z.^4+0.6144E5.*y.^8.*z.^4+(-0.667661E2).* ...
z.^6+0.128E4.*x.^6.*z.^6+0.663855E3.*x.^4.*y.*z.^6+(-0.265542E4).* ...
x.^2.*y.^2.*z.^6+0.1536E5.*x.^4.*y.^2.*z.^6+0.354056E4.*y.^3.* ...
z.^6+0.531084E4.*x.^2.*y.^3.*z.^6+(-0.106217E5).*y.^4.*z.^6+ ...
0.6144E5.*x.^2.*y.^4.*z.^6+0.106217E5.*y.^5.*z.^6+0.8192E5.*y.^6.* ...
z.^6+0.384E4.*x.^4.*z.^8+0.132771E4.*x.^2.*y.*z.^8+(-0.265542E4).* ...
y.^2.*z.^8+0.3072E5.*x.^2.*y.^2.*z.^8+0.531084E4.*y.^3.*z.^8+ ...
0.6144E5.*y.^4.*z.^8+0.6144E4.*x.^2.*z.^10+0.106217E4.*y.*z.^10+ ...
0.24576E5.*y.^2.*z.^10+0.4096E4.*z.^12);
w=-w;

endfunction;

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

# do the scaling
c_outer = [0,0,0]; # for moving center (origin) of blob
r_outer = [45,45,45];# for scaling blob

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