簡體   English   中英

測量網格之間的距離

[英]Measure distance between meshes

對於我的項目,我需要測量兩個 STL 文件之間的距離。 我寫了一個腳本,允許讀取文件,將它們相對於彼此定位在所需的 position 中。現在,在下一步中,我需要檢查一個 object 到另一個的距離。 庫中是否有 function 或腳本可讓我執行此過程? 因為那時我將要定義諸如 interp.netration 區域、最大負距離等指標,所以我需要首先檢查這些對象之間的距離,看看是否存在網格相交並測量該距離。 我將 url 用於我想要測量距離的 2 個對象的組合:

https://imgur.com/wgNaalh

Pyvista 提供了一種非常簡單的計算方法:

import pyvista as pv
import numpy as np

mesh_1 = pv.read(**path to mesh 1**)
mesh_2 = pv.read(**path to mesh 2**)

closest_cells, closest_points = mesh_2.find_closest_cell(mesh_1.points, return_closest_point=True)
d_exact = np.linalg.norm(mesh_1 .points - closest_points, axis=1)
print(f'mean distance is: {np.mean(d_exact)}')

有關更多方法和示例,請查看:

https://docs.pyvista.org/examples/01-filter/distance-between-surfaces.html#using-pyvista-filter

要計算兩個網格之間的距離,首先需要檢查這些網格是否相交。 如果不是,則結果距離可以計算為兩個最近點之間的距離,一個來自每個網格(如下圖所示)。

立方體和環面之間的距離

如果網格確實相交,則有必要找到每個網格在另一個網格內部的部分,然后找到兩個最遠的點,每個點都在內部。 這些點之間的距離將是網格插入的最大深度。 它可以用負號返回,以區別於分開的網格之間的距離。

在 Python 中,可以使用MeshLib庫並從中找到SignedDistance function,如下所示:

import meshlib.mrmeshpy as mr
mesh1 = mr.loadMesh("Cube.stl")
mesh2 = mr.loadMesh("Torus.stl"))
z = mr.findSignedDistance(mesh1, mesh2)
print(z.signedDist) // 0.3624192774295807

暫無
暫無

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

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