Matlab中的相交体积

时间:2013-08-06 20:55:59

标签: matlab 3d volume intersection delaunay

我开发了一个采用一组3D坐标的代码,并执行三角测量以生成凸包/ Delaunay。

这已经顺利并且使用Deluanay三角测量我可以使用tsearchn测试给定体积中是否包含点。

现在我想拍摄两个这样的3D卷,并测试它们是否相交。 此外,我想知道体积A与体积B相交的百分比。

我认为我可以在其中一个卷内生成点网格网格,然后使用tsearchn将它们测试到另一个。但我想知道是否有人知道更方便的方式。或者有进行类似分析的建议。

非常感谢!

编辑...示例代码

对于此示例代码,shapeA将与shapeB相交50% 我在代码末尾添加了一个部分,其中显示了tsearchn的可用性 我知道我可以通过增加形状的点数并使用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])

0 个答案:

没有答案