Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

mesh

Generar malla de isosuperficie a partir de vóxeles activos

Desde R2024b

    Descripción

    [vertices,faces] = mesh(sdm3D) utiliza el algoritmo Marching Cubes para generar una malla de isosuperficie a partir de vóxeles activos que definen el conjunto de nivel cero.

    ejemplo

    Ejemplos

    contraer todo

    Lea y grafique los datos de triangulación del STL de membrana L. Puedes usar esto para comparar con el mapa de distancia firmado.

    triL = stlread("L-Membrane.stl");
    trisurf(triL)
    title("L-Membrane STL")
    [az,el] = view;
    axis equal

    Figure contains an axes object. The axes object with title L-Membrane STL contains an object of type patch.

    Cree un campo de distancia firmado 3-D vacío (SDF) y cargue los datos de la nube de puntos para la membrana L desde un archivo MAT. El archivo MAT contiene datos de la nube de puntos y el origen del sensor asociado con cada dato de la nube de puntos.

    sdm3D = signedDistanceMap3D(Resolution=50);
    load LMembranePC.mat

    Inserte cada nube de puntos en el campo de distancia firmado y muestre la SDF 3-D actualizada.

    for i = 1:size(ptcloud,1)
        insertPointCloud(sdm3D,origin(i,:),ptcloud{i});
        show(sdm3D,Colorbar="on");
        view(az,el)
        axis equal
        drawnow
        pause(.25)
    end
    title(["3-D SDF of L-Membrane"])

    Figure contains an axes object. The axes object with title 3-D SDF of L-Membrane contains an object of type scatter.

    Obtenga todos los vóxeles activos en el SDF 3-D.

    vox = activeVoxels(sdm3D)
    vox = struct with fields:
               ID: 1
          Centers: [49889×3 double]
        Distances: [49889×1 double]
            Sizes: [49889×1 double]
    
    

    Para fines demostrativos, utilice un desplazamiento xyz aleatorio desde los centros de los vóxeles de los primeros tres vóxeles como puntos de consulta. Luego obtenga la distancia y la pendiente utilizando esos puntos de consulta.

    querypts = vox.Centers(1:3,:) + 0.1*rand(3,3);
    d = distance(sdm3D,querypts)
    d = 3×1
    
        0.0379
       -0.0447
        0.0600
    
    
    g = gradient(sdm3D,querypts)
    g = 3×3
    
        0.1924    1.5773   -1.4002
        0.1689    1.6524   -0.8267
       -0.0715   -0.2335    0.3677
    
    

    Genere una malla a partir del campo de distancia firmado en 3D.

    [vertices,faces] = mesh(sdm3D)
    vertices = 18860×3
    
       -0.0100    0.0068    0.1500
       -0.0300    0.0059    0.1500
       -0.0100    0.0100    0.1610
       -0.0300    0.0100    0.1565
        0.0100    0.0047    0.1500
       -0.0100   -0.0100    0.1409
        0.0100   -0.0100    0.1421
        0.0100    0.0025    0.1700
       -0.0010    0.0100    0.1700
        0.0100    0.0094    0.1900
        0.0089    0.0100    0.1900
        0.0100    0.0100    0.1909
       -0.0100    0.0187    0.1700
       -0.0300    0.0259    0.1700
       -0.0100    0.0552    0.1500
          ⋮
    
    
    faces = 37094×3
    
         2     1     3
         4     2     3
         7     1     6
         5     1     7
         9     3     1
         9     1     8
         8     1     5
         8    10    11
         9     8    11
        10    12    11
         3    14     4
        13    14     3
        15    16    17
        16    18    17
         9    13     3
          ⋮
    
    

    Visualizar los datos de la malla.

    meshTri = triangulation(faces,vertices);
    trisurf(meshTri)
    axis equal
    title("Mesh from 3-D SDF")

    Figure contains an axes object. The axes object with title Mesh from 3-D SDF contains an object of type patch.

    Si es necesario, puede utilizar estos datos de malla para crear una malla de colisión utilizando V-HACD. Consulte collisionVHACD (Robotics System Toolbox) para obtener más información.

    Argumentos de entrada

    contraer todo

    Mapa de distancia firmado en 3D, especificado como un objeto signedDistanceMap3D.

    Argumentos de salida

    contraer todo

    Vértices de malla de isosuperficie generados, devueltos como una matriz V por 3. Cada fila representa una posición xyz.

    Caras de malla de isosuperficie generadas, devueltas como una matriz F por 3. Cada fila es una cara triangular formada por tres vértices. Cada elemento es un índice que corresponde a un vértice en el argumento vertices.

    Capacidades ampliadas

    expandir todo

    Generación de código C/C++
    Genere código C y C++ mediante MATLAB® Coder™.

    Historial de versiones

    Introducido en R2024b