I am trying to make surface plots of squashed spheres. The spheres are defined by a list of points. For simplicity, consider the round sphere:
pts = Flatten[
Table[{Sin[θ] Cos[ϕ], Sin[θ] Sin[ϕ],
Cos[θ]}, {θ, 0, π, π/14}, {ϕ, 0,
2 π, 2 π/14}], 1];
One way to plot this is:
ListPlot3D[{pts,
-pts,}
BoundaryStyle -> None,
ColorFunction -> "Rainbow",
InterpolationOrder -> 2,
BoxRatios -> {1, 1, 1}]
ListPlot3D
has the nice feature that it interpolates the data to make a smooth surface. However, the northern and southern hemispheres are shaded differently, so there is a clear break at the equator:
An alternative is to do
ListSurfacePlot3D[pts]
Now the shading is uniform (there is no break at the equator). However, the data is no longer interpolated (and interpolation is not an option for ListSurfacePlot3D
), so the surface looks rough and lumpy:
I am trying to find a solution that combines the best of both world: the smooth surface of ListPlot3D
with the uniform shading of ListSurfacePlot3D
.
Sphere[]
? How are the data points really generated? $\endgroup$ – Jens Aug 30 '14 at 19:13InterpolationOrder
inListPlot3D
is a red herring; the appearance of the plot does not change if you change the order to $1$. Mathematica does not support higher-order interpolation on unstructured data yet. The reason it still looks like a smooth surface is because the shading is being interpolated when the surface is rendered. $\endgroup$ – user484 Aug 30 '14 at 20:56