matlab 3d volume intersection delaunay

Volumen de intersección en Matlab



3d intersection (0)

He desarrollado un código que toma un conjunto de coordenadas 3D y realiza una triangulación para generar el casco convexo / Delaunay.

Esto ha ido bien y usando la triangulación de Deluanay puedo probar si los puntos están contenidos en un volumen determinado usando tsearchn.

Ahora quiero tomar dos de esos volúmenes en 3D y probar si se cruzan. Además, me gustaría saber qué porcentaje del volumen A se cruza con el Volumen B.

Creo que podría generar una malla de puntos que están dentro de uno de los volúmenes, luego probarlos en el otro usando tsearchn. Pero quería saber si alguien sabe de una manera más conveniente. O tiene consejos para hacer análisis similares.

¡Muchas gracias!

EDITAR ... Código de ejemplo

Para este código de ejemplo, shapeA sería intersectada en un 50% por shapeB .
tsearchn una sección al final del código que muestra la usabilidad de tsearchn
Sé que podría resolver mi problema aumentando el número de puntos de las formas y probándolos con tsearchn

% Establish shapes by coordinates botA = [ 0 0 0 ; ... 1 0 0; ... 1 1 0; ... 0 1 0 ]; topA = botA; topA(:,3) = 1; midA = [0.5 0.5 0.5]; botB = [ 0 0 0.5 ; ... 1 0 0.5; ... 1 1 0.5; ... 0 1 0.5 ]; topB = botA; topB(:,3) = 1.5; midB = [0.5 0.5 1]; % Shape arrays shapeA = [botA;midA;topA]; shapeB = [botB;midB;topB]; % Establish volume by using the delaunayn() function dtA = delaunayn(shapeA); dtB = delaunayn(shapeB); % Plot the volume surfaces shapesurfA=tetramesh(dtA,shapeA); set(shapesurfA,''FaceColor'',''b'',''FaceAlpha'',.90,''EdgeAlpha'',1); hold on shapesurfB=tetramesh(dtB,shapeB); set(shapesurfB,''FaceColor'',''y'',''FaceAlpha'',.90,''EdgeAlpha'',1); hold off axis equal %example of point in volume test %if tsearchn output = NaN then testpoint is not in volume testpoint1 = tsearchn(shapeA,dtA, [ 2 2 2]) % [test point [2 2 2] in volume A testpoint2 = tsearchn(shapeA,dtA, [0.75 0.75 0.75])