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. |
# 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 calculationsGNU Octave