Вы не предоставляете данные поверхности для fill3
, только точки, поэтому нет четко определенной триангуляции, и она пытается заполнить между последовательными вершинами (которые могут быть в произвольном порядке).
Вы можете воссоздать данные поверхности, используя функцию типа convhull
(если ваш объект выпуклый), см. Пример ниже.
В качестве альтернативы, поскольку у вас есть файл STL, возможно, у вас уже есть данные триангуляции для использовать с trisurf
.
% Create points on a sphere
N = 200;
TH = 2*pi*rand(1,N).';
PH = asin(-1+2*rand(1,N)).';
A = NaN(N,3);
[A(:,1),A(:,2),A(:,3)] = sph2cart(TH,PH,1);
% Plotting
figure(5); clf
subplot(1,3,1);
plot3(A(:,1),A(:,2),A(:,3),'.');
grid on; title( 'plot3' );
subplot(1,3,2);
fill3(A(:,1),A(:,2),A(:,3),'b');
grid on; title( 'fill3' );
subplot(1,3,3);
Tri = convhull(A(:,1),A(:,2),A(:,3));
trisurf(Tri,A(:,1),A(:,2),A(:,3),'Facecolor','b');
grid on; title( 'trisurf / convhull' );