绘制 3d 形状的“内部”和“外部”凸包

问题描述

我想估计凸 3d 对象的形状。首先让我举一个关于 2d 的例子:

enter image description here

假设图中有黑色给出的凸形。我们不知道它的形状,但我们得到了点 A,B,C,D。在 Matlab 上使用 convexhulltrisurf 命令,我们可以绘制蓝色给出的“内部”凸包。现在,如果我们不仅给定了点 A,D,还给定了通过这些点到黑色物体的切线,我们可以通过点 A1,B1,C1,D1. 绘制“外”凸包。“外”凸包是更难绘制,因为切线相交的点很多,所以我们需要想办法具体得到A1,D1

在 3d 中,我们根据平面方程 ax+by+cz=d 给出了这些点的点和切平面。这是生成接下来两个数字的 Matlab 程序:

load("planedata.mat");
load("planedata_d.mat");
load("points.mat");

a=planedata(1:100,1);
b=planedata(1:100,2);
c=planedata(1:100,3);
d=planedata_d;

figure(1)
x = points(1,:); y = points(2,:); z = points(3,:);
[k1,av1] = convhull(x,y,z);
trisurf(k1,x,z);                    %plot interior convex hull
xlabel('$X$','Interpreter','latex');
ylabel('$Y$','latex');
zlabel('$Z$','latex');

figure(2)
[X,Y] = meshgrid(x,y);
for i=1:100
    Z=real(-(a(i)*X+b(i)*Y+d(i))/c(i));
    hold on
    surf(X,Y,Z);                      %plot exterior convex hull
end
xlim([-1 2])
ylim([-1 2])
zlim([0 4])
xlabel('$X$','latex');

您可以从 here 下载数据文件。首先,我们只是为给定的点绘制“内部”凸包:

enter image description here

然后是切平面:

enter image description here

而且我也可以通过像这样在特定高度切割所有平面来看到“外部”凸包的形状:

enter image description here

有什么办法可以去掉所有的平面,只绘制“外部”凸包,这样图形看起来像“内部”凸包,但尺寸当然要大一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)