擅长:python、mysql、java
<p>另一种方法可能是使用VTK。可以将numpy stl对象(obj)转换为vtkPolyData</p>
<pre><code>import vedo
import vtk
import itertools
obj = your_mesh
verts = list(itertools.chain(*(obj.vectors)))
faces = [[i*3, i*3+1, i*3+2] for i in range(len(verts)//3)]
vpoly = vedo.Mesh([verts, faces]).clean().polydata()
</code></pre>
<p>然后可以使用vtkCutter<a href="https://discourse.vtk.org/t/get-intersection-of-polydata-line-and-a-plane/3894/3" rel="nofollow noreferrer">https://discourse.vtk.org/t/get-intersection-of-polydata-line-and-a-plane/3894/3</a>或vtkIntersectionPolyDataFilter<a href="https://stackoverflow.com/questions/57211756/vtk-check-polydata-point-objects-for-intersection">VTK check polydata point objects for intersection</a></p>
<p>关于您的第一个想法,是的,您可以将STL文件转换为一组三角形,只需查看:</p>
<pre><code>your_mesh.vectors
</code></pre>
<p>这是一个三角形三维顶点数组。从中可以构造一个平面,然后计算线段和平面之间的交点</p>
<p>关于第二个想法,只有当轨迹正好与顶点相交时,才能这样做,否则它将无法检测到相交。(或者你需要给它一个余量)</p>