1

我使用wireframe函数创建了一个 3D 图(一个曲面)。我想知道是否有任何函数可以计算 3D 图中表面下的体积?这是我的数据示例以及wrieframe用于创建 3D(曲面)图的语法:

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 的矩阵

谢谢

4

2 回答 2

3

您要输入的数据wireframe是一个值网格。因此,对所近似的任何下垫面的体积的一种估计是网格值乘以网格单元面积的总和。这就像将直方图条的高度相加以获得直方图中值的数量。

我在您的数据上看到的问题是单元格区域将采用奇数单位 - 一个轴上的百分位数,另一个轴上phi的单位未知,因此您的体积将有损失单位乘以百分位数单位乘以 phi 的单位。

如果您想在完全相同的网格上比较相似事物的体积,这不是问题,但是如果您在不同的网格上有表面(不同的 phi 值或不同的百分位数),那么您需要小心。

现在,请注意它wireframe不像 3d 直方图那样绘制(看起来像方形塔楼),这为我们提供了另一种估计体积的方法。您的 10x10 矩阵被绘制为 9x9 正方形。将这些正方形中的每一个分成三角形,然后计算 192 个右截头三角棱柱的体积(我认为它们就是这样 - 它们是具有直角和一个倾斜端的等边三角棱柱)。这个公式应该在某个地方。可能底面积乘以高度到三角形的质心或其他东西。

我想也许这会在光栅包中,但事实并非如此。有计算表面积而不是体积的代码!我相信光栅维护者会很乐意为此提供一些代码!

于 2013-05-05T09:08:37.317 回答
1

如果这些点是任意的(即不遵循平滑函数),那么您似乎正在寻找围绕这些点的凸包(最小表面)的体积。一个可以帮助您计算的软件包是 alphashape3d

您需要一个 3 列的坐标矩阵来形成正确类型的对象来进行计算,但这似乎相当简单。

于 2013-05-05T07:55:25.470 回答