这是我谦虚的建议:
N = 400; % resolution
x = linspace(-1,1,N);
y = linspace(-1,1,N);
[X,Y] = meshgrid(x,y);
Triangle1 = -abs(X)+1.5 ;
Triangle2 = -abs(Y)+1.5 ;
Z = min(Triangle1, Triangle2);
Trig = alphaShape(X(:),Y(:),Z(:),2);
[Xs,Ys,Zs] = sphere(N-1);
Sphere = alphaShape(Xs(:),Ys(:),Zs(:)+2,2);
% get all the points from the pyramid that are within the sphere:
inSphere = inShape(Sphere,X(:),Y(:),Z(:));
Zt = Z;
Zt(inSphere) = nan; % remove the points in the sphere
surf(X,Y,Zt)
shading interp
view(70,35)
axis tight
我使用 alphaShape 对象从金字塔中删除所有不需要的点,然后在没有它们的情况下绘制它:
我知道,它并不完美,因为你没有在金字塔中看到圆圈的底部,但是我所有尝试实现这一目标都失败了 . 我的基本想法是将它们绘制在一起,如下所示:
hold on;
Zc = Zs;
inTrig = inShape(Trig,Xs(:),Ys(:),Zs(:)+1.5);
Zc(~inTrig) = nan;
surf(Xs,Ys,Zc+1.5)
hold off
但结果并不是那么好,因为你无法真正看到金字塔内的圆圈 .
无论如何,我在这里发布,因为它可能会给你一个指导 .