簡體   English   中英

在MATLAB中在人體點上繪制3D voronoi多面體

[英]Drawing 3D voronoi polyhedrons over human body points in MATLAB

我試圖圍繞放置在人體框架上的一組點(它們是傳感器位置的坐標)以3D繪制voronoi多面體。 我在MATLAB中找到了幾種方法。 除了他們沒有給我正確的多面體。 我了解3D中的voronoi會出現如下幾點。

我對圖形的期望如何: 我對圖形的期望如何。

對於我的一組數據點,voronoi多面體沒有封裝所有點。 由我的數據點組成的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 )中的代碼在這些點上繪制了voronoi,但出現類似以下錯誤:

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

我不確定發生了什么,但是V的第一行僅包含Inf值,這是導致錯誤繼續發生的原因。

dt = delaunayTriangulation(X);
figure
[V,R] = voronoiDiagram(dt);
V(1,:) = []; %// INTERESTING LINE, removes the Inf values
tid = nearestNeighbor(dt,0,0,0);
XR10 = V(R{tid},:);
K = convhull(XR10);
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')

我得到以下情節:

在此處輸入圖片說明

引用的文檔頁面

觀察與凸包上的點關聯的Voronoi區域是無界的。

這就是為什么您看到的點不被多面體包圍的原因-它們的Voronoi區域中沒有定義任何有限多面體。

您期望看到的附件圖像看起來像Voronoi區域與Voronoi圖中有限頂點的最小邊界立方體的交集。 使用內置的MATLAB函數進行計算並非易事,因為它們都不提供Voronoi圖中半無限元素的方向的定義。 由Voronoi圖和多維數據集的交點定義的多面體可能包含由以下組成的頂點:

  • 相應的Voronoi區域中的有限頂點
  • Voronoi區域中的半無限面與立方體中的邊之間的交點
  • Voronoi區域中的半無限邊與立方體中的面之間的交點
  • 連接上述交點的邊界所包圍的立方體的頂點

這是我不會嘗試解決的具有挑戰性的幾何問題。 您可以看到MATLAB使用基於三角剖分的方法來通過edit voronoi計算2D線到無窮大的方向-這可能提供了有關如何在3D中生成相同線的線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM