簡體   English   中英

Python:從凸包獲取曲面

[英]Python: Get Surfaces from convex hull

我是 3D 計算的新手,我搜索了一段時間,但找不到任何解決方案(也許我使用了錯誤的搜索詞)。

所以我有不同的 3D 點雲 - 例如一個有 5 個點的“金字塔”:

在此處輸入圖像描述

該數組如下所示:

pts = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0],
                [0.5, 0.5, 1], ])

現在我想提取所有“表面”——我的計划是計算凸包,但我找不到任何屬性來獲得表面——我用 scipy.spatial 進行了測試

hull = ConvexHull(pts) 

例如我想關注 output:

surfaceCount: 5
surface[0]: [0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0] (yellow)
surface[1]: [0, 0, 0], [0, 1, 0], [0.5, 0.5, 1] (blue)
surface[2]: [0, 0, 0], [1, 0, 0], [0.5, 0.5, 1] (no color)
surface[3]: [1, 0, 0], [1, 1, 0], [0.5, 0.5, 1] (orange)
surface[4]: [1, 1, 0], [0, 1, 0], [0.5, 0.5, 1] (green)

在此處輸入圖像描述

我如何計算這些“表面”?

謝謝開發先生

編輯:好的,我認為我的問題很具體——但這是我的下一次嘗試(我找到了圖書館“pyvista”)

我有以下代碼:

import numpy as np
import pyvista as pv

points = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0],
                [0.5, 0.5, 1], ])


# points is a 3D numpy array (n_points, 3) coordinates of a sphere
cloud = pv.PolyData(points)


volume = cloud.delaunay_3d(alpha=5.)
shell = volume.extract_geometry()

surf = volume.extract_surface()
ug = surf.cast_to_unstructured_grid()
surf.plot()

pv.save_meshio("test.obj", surf)

此代碼生成一個 *.obj 文件

# Created by meshio v5.2.2, 2022-01-16T16:44:24.834322
v 0.0 0.0 0.0
v 1.0 1.0 0.0
v 1.0 0.0 0.0
v 0.5 0.5 1.0
v 0.0 1.0 0.0
f 1 2 3
f 1 3 4
f 1 5 2
f 1 4 5
f 3 2 4
f 2 5 4

並向我顯示 plot:

在此處輸入圖像描述

我希望在這個 object 文件中找到 5 個“面孔”——但有 6 個——因為“地面”被分成兩個三角形——條目:

f 1 2 3    
f 1 5 2

所以我的問題是:是否有可能(也許使用 pyvista)生成一個 output 文件(不管它是 an.obj 文件還是其他文件),我可以在其中找到金字塔的 5 個“面孔”?

謝謝

你不需要德勞內。 此外,面必須由其點的索引給出。

import numpy as np
import pyvista as pv

pts = np.array([[0, 0, 0], 
                [1, 0, 0], 
                [1, 1, 0], 
                [0, 1, 0],
                [0.5, 0.5, 1]], np.float64)
faces = np.hstack([[3, 0, 1, 4], 
                   [3, 1, 2, 4], 
                   [3, 2, 3, 4], 
                   [3, 0, 3, 4], 
                   [4, 0, 1, 2, 3]])
mesh = pv.PolyData(pts, faces)
mesh.plot()

mesh.area
Out[24]: 3.23606797749979

暫無
暫無

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

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