我们先来一个物理方法, 再来数学方法.
假设现在有 个圆锥和圆柱, , 我们往这个圆柱空间投点, 计算有多少点在椎体内, 有多少点在椎体外的柱体内, 然后计算椎体内的点占所有点的半分比.
如下代码.
解释一下代码, 我一共进行了一亿次模拟. 矩阵 的 列里放的是 的随机数. 分别用来储存点坐标的 .
计算 , 也就是各个点到中心的距离, 存储在矩阵 的 列中, 并筛去那些没有落在圆 内的点.
这样, 我们就可以得到圆柱内的所有点的个数, 储存在 中
下一步我们就是要统计落在圆锥内的点的个数.
对于一个半径为 , 高度为 的圆锥来说, 其在 处的半径为 (相似三角形可证). 所有如果一个点落在椎体内, 一定有
而我们代码里面的 , 所以写成代码就如下所示.
筛去没有落在椎体内的点, 并且统计剩下的点数.
用椎体的点数除以圆柱的所有点数, 就得到了椎体和圆柱的体积之比.
clear point=zeros(1e8,5); point(:,2:4)=rand(1e8,3); point(:,5)=point(:,3).^2+point(:,4).^2; point(:,1)=floor(point(:,5))*(-1)+1; point(point(:,1)==0,:)=[]; before=size(point,1); point(:,1)=floor(point(:,5)-(1-point(:,2)).^2)*(-1); point(point(:,1)==0,:)=[]; after=size(point,1); volume=vpa(after/before)
非常不错, 和 非常接近, 所以我们猜测椎体体积是圆柱体体积的 .
那我们怎么用数学证明这个结论呢?
设圆锥体底面积为 , 高度 处的截面积 , , 所以 (相似三角形可证)
所以椎体体积为
所以, 椎体体积为 的底面积乘高, 和数值模拟出来是一样的.
注意, 这里的椎体不一定是圆锥体, 四棱锥, 五棱锥, 任意棱锥也有相同的结论, 也是用相似三角形证明截面积和底面积只比再积分. 只不过四棱锥五棱锥可以看成多个三棱锥的拼接.