计算表面下的体积
我使用wireframe
函数创建了3D图(表面)。我想知道是否有任何函数可以用来计算3D图中表面下的体积? 这里是我的数据样本再加上我用来创建我的3D(面)情节wrieframe
语法:计算表面下的体积
x1<-c(13,27,41,55,69,83,97,111,125,139)
x2<-c(27,55,83,111,139,166,194,222,250,278)
x3<-c(41,83,125,166,208,250,292,333,375,417)
x4<-c(55,111,166,222,278,333,389,445,500,556)
x5<-c(69,139,208,278,347,417,487,556,626,695)
x6<-c(83,166,250,333,417,500,584,667,751,834)
x7<-c(97,194,292,389,487,584,681,779,876,974)
x8<-c(111,222,333,445,556,667,779,890,1001,1113)
x9<-c(125,250,375,500,626,751,876,1001,1127,1252)
x10<-c(139,278,417,556,695,834,974,1113,1252,1391)
df<-data.frame(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)
df.matrix<-as.matrix(df)
wireframe(df.matrix,
aspect = c(61/87, 0.4),scales=list(arrows=FALSE,cex=.5,tick.number="10",z=list(arrows=T)),ylim=c(1:10),xlab=expression(phi1),ylab="Percentile",zlab=" Loss",main="Random Classifier",
light.source = c(10,10,10),drape=T,col.regions = rainbow(100, s = 1, v = 1, start = 0, end = max(1,100 - 1)/100, alpha = 1),screen=list(z=-60,x=-60))
注:我的真实数据是100X100矩阵
感谢
您要输入到wireframe
的数据是一个网格值。因此,这个近似表面的任何底层体积的估计值是网格值乘以网格单元面积的总和。这就像添加直方图条的高度来获取直方图中的数值一样。
我跟你看到的问题在你的数据上这样做是因为单元格区域将以奇数单位 - 一个轴上的百分位数,另一个轴上的百分位数为phi
而另一个单元格上有未知单位,所以你的数量将有单位损失倍数单位百分比乘以phi单位。
如果您想在完全相同的网格上比较相似的东西的体积,但是如果您在不同的网格上有不同的表面(不同的phi值或不同的百分位数),那么这不是问题,那么您需要小心。
现在,请注意,wireframe
不会绘制像3d直方图那样(看起来像方形塔块),这给了我们另一种估计体积的方法。您的10x10矩阵绘制为9x9的方块。将每个方块分成三角形,然后计算192个右截角三角棱镜的体积(我认为这就是它们 - 它们是具有直角和一个倾斜端的等边三角形棱镜)。这个公式应该在某个地方。可能基地面积乘以三角形质心的高度或某物。
我想也许这将在光栅包中,但事实并非如此。有代码来计算表面积,但不是音量!我相信光栅维护人员会很乐意为此提供一些代码!
如果点是任意的(即,不遵循平滑函数),似乎你正在寻找围绕这些点的凸包(最小曲面)的体积。一个包来帮助你计算这个是alphashape3d。
您需要一个3列矩阵的坐标来形成正确的对象类型来进行计算,但它看起来相当直接。
非常感谢你的回答。我刚刚将我的数据样本添加到上述问题中。如果你看一看,我会很感激。 – AliCivil 2013-05-05 10:00:16
谢谢太空人的全面回答!对此,我真的非常感激。 – AliCivil 2013-05-06 00:04:40