I have a 3D surface ( such as a cone). It is projected to a 2D plan in the form of contour, meaning that different Z will have different lines on 2D plan. The problem is from the contour, how to recover the 3D surface by using interpolation? We only know about the z difference between different contor lines.
The technical term for the "contours" you mentioned is "iso-lines".
Given the set of iso-lines you first need to construct a point cloud in 3D (just a collection of points in 3D space). You do that in two stages. first by sampling each iso-line at a uniform intervals, You get 2D points and then you raise the points by the appropriate height.
sampling a line at uniform intervals can be easily done by tracing it wherever it goes. You can know the height of a line by starting from the most outer line and tracing the lines one by one towards the inside, removing each line you trace and and keeping track of how many lines you traced.
Of course you need to know in advance what is the height difference between the lines and what is the height of the most outer line (or any other line which can be used as a reference)
Once you have a 3D point cloud you can use any one of a number of surface reconstruction algorithms. This company for instance makes an application which does that and you can download a command line demo from their site which will work for up to 30,000 points.
A surface reconstruction algorithm would a waste of time in this case if your points are in the z=f(x,y) or your shape is convex.
For z=f(x,y) is the easy solution
- delaunay triangulation using only x,y coordinates
- plot the surface with previous triangulation, this time use z too. Job is done!
Your shape is convex use a convhull algorithm
Your shape is concave use: http://www.advancedmcode.org/surface-recostruction-from-scattered-points-cloud-mycrust-robust.html