我想繪製voronoi多面體圍繞一組點(傳感器的位置座標)放置在人類的框架上。我在MATLAB中找到了幾種方法。除了他們沒有一個給我正確的多面體。我理解3D中voronoi的一組點應該像這樣出現。在MATLAB中繪製3D voronoi多面體在人體上的點
我沒有料到的圖形看起來像:
對於我的組數據點,沃羅諾伊多面體不封裝所有的點。由我的數據點形成的voronoi多面體看起來像這樣:
。
我的數據集的座標是:
X= [116,191,0;
108,183,0;
120,175,0;
100,162,12;
116,166,8;
133,158,14;
100,150,0;
116,166,15;
125,144,8;
90,133,5;
108,133,2.5;
144,133,5;
116,116,15;
144,116,6.5;
108,100,-5;
150,100,15;
83,100,15;
108,83,14;
100,58,13;
133,50,13;
100,25,11;
133,30,12;
100,8.3,14;
133,8.3,14];
我使用的代碼中的鏈接(http://www.mathworks.com/help/matlab/math/voronoi-diagrams.html)關於這些點來繪製沃羅諾伊,我得到這樣的錯誤:
Error using convhull
The coordinates of the input points must be finite values; Inf and NaN are not permitted.
Error in best3D_original (line 38)
K = convhull(XR10);
基本上,保存多邊形頂點的矢量V在第一行中具有Inf
值。即使我強行刪除第一行,我也沒有得到我所需的結果。代碼如下所示:
dt = delaunayTriangulation(X);
figure
[V,R] = voronoiDiagram(dt);
tid = nearestNeighbor(dt,0,0,0);
XR10 = V(R{tid},:);
K = convhull(XR10);
K
defaultFaceColor = [0.6875 0.8750 0.8984];
trisurf(K, XR10(:,1) ,XR10(:,2) ,XR10(:,3) , ...
'FaceColor', defaultFaceColor, 'FaceAlpha',0.9)
title('3-D Voronoi Region')
我也試過在同一組數據點的另一個腳本中分別引入一個補丁函數。該代碼看起來是這樣的:
X=[x y z];
[V,C]=voronoin(X);
for k=1:length(C)
disp(C{k})
end
for k=2:length(C)
if all(C{k}~=1)
VertCell = V(C{k},:);
KVert = convhulln(VertCell);
patch('Vertices',VertCell,'Faces',KVert,'FaceColor','g','FaceAlpha',0.5);
end
end
我嘗試了類似於您的建議。如果使用plot3(X(:,1),X(:,2),X(:,3),'*');然後執行代碼,所有的點都沒有被這些多面體吞沒。另外,如果仔細觀察,似乎並不是圍繞每個點都形成了voronoi多面體。我還想指出的是,將最近鄰點指向中心點(116,166,15)的最多點比(0,0,0)多一點。但是,這仍然不能解決我的問題。 – Swathi