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
Click on the snapshot to download the blob's stl file. |
# 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 calculationsGNU Octave