geometry - Minimal surface solution in Python -
i have set of 3d points defining 3d contour. want obtain minimal surface representation corresponding contour (see minimal surfaces in wikipedia). requires solve nonlinear partial differential equation.
in matlab straightforward using pdenonlin
function (see matlab's documentation). example of usage solving minimal surface problem can found here: minimal surface problem on unit disk.
i need make such implementation in python, know haven't found web resources on how to this.
can point me resources/examples of such implementation?
thanks, miguel.
update
the 3d surface (ideally triangular mesh representation) want find bounded set of 3d points (as seen in figure, points lie in best-fit plane):
ok, doing research found minimal surface problem related solution of biharmonic equation, , found thin-plate spline fundamental solution equation.
so think approach try fit sparse representation of surface (given 3d contour of points) using thin-plate splines. found this example in scipy.interpolate scattered data (x,y,z format) interpolated using thin-plate splines obtain zi coordinates on uniform grid (xi,yi).
two questions arise: (1) thin-plate spline interpolation correct approach problem of computing surface set of 3d contour points? (2) if so, how perform thin-plate interpolation on scipy non-uniform grid?
thanks again! miguel
update: implementation in matlab (but doesn't work on scipy python)
i followed this example using matlab's tpaps
function , obtained minimal surface fitted contour on uniform grid. result in matlab (looks great!):
however need implement in python, i'm using package scipy.interpolate.rbf , thin-plate
function. here's code in python (xyz
contains 3d coordinates of each point in contour):
grid_points = 25 x_min = xyz[:,0].min() x_max = xyz[:,0].max() y_min = xyz[:,1].min() y_max = xyz[:,1].max() xi = np.linspace(x_min, x_max, grid_points) yi = np.linspace(y_min, y_max, grid_points) xi, yi = np.meshgrid(xi, yi) scipy.interpolate import rbf rbf = rbf(xyz[:,0],xyz[:,1],xyz[:,2],function='thin-plate',smooth=0.0) zi = rbf(xi,yi)
however result (quite different obtained in matlab):
it's evident scipy's result not correspond minimal surface.
is scipy.interpolate.rbf + thin-plate doing expected, why differ matlab's result?
the question states need solve nonlinear partial differential equation. wikipedia states 'they difficult study: there no general techniques work such equations, , each individual equation has studied separate problem.' however, didn't give equation! , matlab use genetic algorithms arrive @ surfaces? is, use rule of thumb make best guess , tries out small variations in component squares until no smaller surface can found. implementing kind of solution laborious not conceptually difficult (assuming sort of thing). remember calculus of continuous functions special case of calculus of linear approximations of functions (the increment set 0 instead of finite value). made clear me reading books of j l bell on smooth infinitesimal analysis - use algebra finite increments , leave resulting factors in derivations instead of 'neglecting' them.
Comments
Post a Comment