MATLAB 中包含一系列多面体相关的函数,其生成多面体函数以及多面体体积计算的输入参数均为多面体的顶点,具体原理可查阅Delaunary相关文献。具体代码如下,
%%功能:生成多面体以及计算其体积,判断某点是否在多面体内部
clc;
clear all;
close all;
x = gallery(‘uniformdata’,[30 1],0);%%[0 ;0 ;0 ;0 ;10 ;10 ;10 ;10 ];%%生成随机顶点的x坐标
y = gallery(‘uniformdata’,[30 1],1);%%[ 0 ; 0 ; 10; 10 ; 0 ; 0 ; 10 ; 10 ];%%生成随机顶点的y坐标
z = gallery(‘uniformdata’,[30 1],2);%%[ 0; 10; 0; 10; 0; 10; 0; 10];%%生成随机顶点的z坐标
point_set=[x y z];%%顶点坐标集合
p_detected=rand(1,3);%%待检验点
tri = delaunayTriangulation(point_set);%%delaunay三角剖分
tetramesh(tri,’FaceAlpha’,0.3);%%绘制多边形图
hold on;
scatter3(p_detected(1,1),p_detected(1,2),p_detected(1,3),100,’filled’,’r’)%%标注待检测点
t = tsearchn(point_set,tri,p_detected);%%判断待检测点是否在多面体内
if isnan(t)
disp(‘No’) ;
else
disp(‘Yes’) ;
end
[ch ,volume] = convexHull(tri);%%计算多面体体积
fprintf(‘%s %d’,’volume=’,volume);