I was considering to advise the use of ListSurfacePlot3D
to do this, but after tinkering with it for some while, I found it is awful for reconstruction of spherical plots.
Let's take an example from the documentation:
SphericalPlot3D[1 + 2 Cos[2 θ], {θ , 0, Pi}, {ϕ, 0, 2 Pi}]
The surface could be sampled like this:
data = Flatten[Table[{1 + 2 Cos[2 θ], θ, ϕ}, {θ, 0, Pi, Pi/30}, {ϕ, 0, 2 Pi, 2 Pi/30}], 1];
In v9 we have got an easy way to transform coordinates form spherical to Cartesian:
mapping = CoordinateTransformData["Spherical" -> "Cartesian", "Mapping"]
{Cos[#1[[3]]] Sin[#1[[2]]] #1[[1]], Sin[#1[[2]]] Sin[#1[[3]]] #1[[1]], Cos[#1[[2]]] #1[[1]]} &
Those without v9 can use the pure function in the output above.
This works fine withListPointPlot3D
:
ListPointPlot3D[mapping /@ data, BoxRatios -> Automatic]
However, it gets absolutely horrible results with ListSurfacePlot3D
ListSurfacePlot3D[mapping /@ data, BoxRatios -> Automatic]
Increasing sampling density doesn't help at all. Neither does the application of the MaxPlotPoints->Infinity
option. So, it looks like that Jens' answer is the best solution in this case.