Проблема в том, что используется форма {x, y, z, f} ListContourPlot3D
в низком разрешении.Я также наткнулся на это несколько недель назад, вот минимальный пример ошибки:
xyzfdata[r_] := Flatten[#, 2] &@Table[{x, y, z, x^2 + y^2 + z^2 - 1},
{x, -2, 2, r}, {y, -2, 2, r}, {z, -2, 2, r}];
(* Low resolution {x,y,z,f} fails *)
ListContourPlot3D[xyzfdata[1], Contours -> {0}]
Решение в моем случае (у меня были данные в сетке) состояло в том, чтобы использовать форму сетки иDataRange
:
fdata[r_] := Table[x^2 + y^2 + z^2 - 1,
{z, -2, 2, r}, {y, -2, 2, r}, {x, -2, 2, r}];
(* Low resolution works ok for array data *)
ListContourPlot3D[fdata[1], Contours -> {0},
DataRange -> 2 {{-1, 1}, {-1, 1}, {-1, 1}}]
Я думаю, проблема в том, что для формы {x, y, z, f} реализация использует интерполяцию таким образом, что происходит сбой при низком разрешении.С увеличением разрешения в первом примере все работает:
(* Higher resolution {x,y,z,f} works *)
ListContourPlot3D[xyzfdata[.2], Contours -> {0}]