Are 3D-testpoints located inside or outside an arbitrary watertight mesh with vertices and faces?
1,9K descargas
Actualizado 26 jul 2016

Ver licencia

How often does this happen: You have a nice mesh in 3d, which is described by an np by 3 array of vertices and an nt by 3 array of indices into this array, which describe the faces. lets further say, the mesh is closed, i.e. it divides the total 3d space into a bounded and an unbounded domain in a way that it is impossible to connect any point inside with any point outside the domain without crossing the triangulation.
Now you have another fine set of points in 3d and you need to know which of these points are inside the triangulated volume and which aren't.
Intriangulation is the solution.

With the command

in = intriangulation(vertices,faces,testpoints)

you get an array of the same length as the testpoints with an entry 1 for testpoints inside the triangulated volume and an entry 0 for those points that aren't. (OK, you get -1 for points where the algorithm failed.)


help intriangulation

for an example and details.

In contrast to the FEX-submission inpolyhedron, you do not need to compute and/or preprocess any face normals in intriangulation.

The mesh may not have internal faces!


I have to announce that the core algorithm is 99% identical to the algorithm from Adam Aitkenhead in his submission "Mesh voxelisation". I use it here with his permission. Please go and rate "mesh voxelisation" also if you like intriangulation.

Also thanks to Sven's comments on algorithm and special cases.

Citar como

Johannes Korsawe (2024). intriangulation(vertices,faces,testp,heavytest) (, MATLAB Central File Exchange. Recuperado .

Compatibilidad con la versión de MATLAB
Se creó con R2010b
Compatible con cualquier versión
Compatibilidad con las plataformas
Windows macOS Linux
Más información sobre Computational Geometry en Help Center y MATLAB Answers.

Inspirado por: Mesh voxelisation

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Versión Publicado Notas de la versión

Added function drehmatrix, which is needed for optional parameter heavytest.
Also added comments for alternative interpretation of heavytest inside code.

result=1 for testpoints==vertices

Numerous improvements in speed using Matlab Profiler.

Algorithm update: No more fails if testpoint is projected on edge of mesh.

Following the idea of Sven's hint. Testing successive directions only if former tests left undeterminable results.