I would expect the "Quality" option to give the second result here, which has more polygons and seems to be the better approximation of the implied level surface obtained by trilinear interpolation of the data. This is what ListContourPlot3D claims to do:

ListContourPlot3D linearly interpolates values to give smooth contours.

enter image description here


data = 1. Table[{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, 3];
contour = 0.884`;
ListContourPlot3D[data, Contours -> {contour}, 
 PerformanceGoal -> "Quality"]
ListContourPlot3D[data, Contours -> {contour}, 
 PerformanceGoal -> "Speed"]

IMO, the plot that this should approximate is the piecewise linear (here trilinear because it's 3D data) interpolation of the data, i.e.

idata = MapIndexed[#2~List~#1 &, data, {ArrayDepth@data}]~Level~{-3}
f = Interpolation[idata, InterpolationOrder -> 1]
ContourPlot3D[f[x, y, z], {x, 1, 3}, {y, 1, 3}, {z, 1, 3}, 
 Contours -> {contour}]

enter image description here

and this is what the PerformanceGoal -> "Speed" variant seems to do.


Confusingly, the 2d variant ListContourPlot never even tries to show the bilinearly interpolated function, it only ever linearly interpolates on the edges of the uniform grid (kind of like a 2d marching cubes):

enter image description here

  • $\begingroup$ It should also be noted that "Quality" renders more than twice as fast as "Speed". $\endgroup$ – Feyre Aug 16 '16 at 8:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.