我咋看也是个光滑曲面呀,哪来的体积?当然假如xy面到曲面之间全被填充为实体,应该能用循环或积分计算每个xy单位面积上的曲顶柱体的体积,然后求和,我用循环尝试了下:
z=[
0.82 0.71 0.63 0.41 0.62
0.83 0.63 0.46 0.4 0.48
0.55 0.47 0.48 0.37 0.52
0.5 0.41 0.49 0.39 0.42
0.52 0.57 0.47 0.45 0.34];
x=[-1:0.5:1]
y=[-1:0.5:1]
surf(x,y,z);
shading interp;
for i=1:5
for j=1:5
M(i,j)=z(i,j)*0.5*0.5(对于每个面积为0.5*0.5的小方格以上的曲顶柱体求体积)
end
end
sum (sum(M))对体积数组(25个元素体积求和)结果如下:
M =
0.2050 0.1775 0.1575 0.1025 0.1550
0.2075 0.1575 0.1150 0.1000 0.1200
0.1375 0.1175 0.1200 0.0925 0.1300
0.1250 0.1025 0.1225 0.0975 0.1050
0.1300 0.1425 0.1175 0.1125 0.0850
>> size(M)
ans =
5 5
>> sum(M)
ans =
0.8050 0.6975 0.6325 0.5050 0.5950
>> sum(ans)
ans =
3.2350
楼主给的数据点太少,导致求曲顶柱体体积的此种运算需要插值法进行加点运算,我偷懒了,没有进行差值运算,毕竟忘了很久了,而且插值法有很多种(据我所知都有3-4种),运用在三维图形中就更麻烦了,所以只是用了楼主给出的25个数据点高程进行最最粗略的估算。
如果嫌此种方法太简单,只要数据够多或者插值法加点很多就可以对求高程的z数组进行编辑以获得更多的高程数据:
假设九个方格共十六个点,各点高程为z(i,j)各点为权重w(i,j)并假设16点权重和为1,则方格中心位置高程插值
Z(i,j)=sum(w(i,j)*z(i,j))九宫16点插值拟合法(16个空间高程点的加权平均,也称三次样条插值)
如果是两个曲面之间的距离,则可使用上面的体积元素之差作为曲顶柱体的高。
拟合完毕了就是照搬公式的体积求和运算:每个高程对应的xy面上的小方格乘以高程,然后对[高程*面积]所有元素求和,就能得到曲顶柱体的近似体积,插值越多,数据点越多,近似越精确!
总体来讲:思路很简单,但是过程复杂,所牵涉的知识比较多,希望对您有帮助!