使用 misc3d 从等值面采样值

问题描述

背景

我想从等值面采样值,使用 misc3dR 包中的行进平方算法计算。本质上,问题如下:我有一个模拟,它采用三个参数并输出一个值。我想颠倒这个过程:我想输入结果并获得可能的参数组合。

方法

我在 computeCountour3d 包的 misc3d 函数中使用了行进方块算法。正如我正确理解的那样,它输出一个数据框,其中每三行代表一个三角形平面的顶点。在这个平面中,所有的参数组合都应该导致相同的输出(=级别),对吗?

library(tidyverse)
library(misc3d)

# Create a dataset (the mean() is used for simplicity)
data <- expand_grid(x = seq(1,51,10),y = seq(0,-2,-0.5),z = seq(0,-3,-1)) %>%
  rowwise() %>% mutate(value = mean(c(x,y,z)))

data

#>        x     y     z  value
#>  1     1   0       0  0.333
#>  2     1   0      -1  0    
#>  3     1   0      -2 -0.333
#>  4     1   0      -3 -0.667
#>  5     1  -0.5     0  0.167
#>  6     1  -0.5    -1 -0.167

# Turn dataframe into an 3d array
value <- data$value
data <- data[order( data$x,data$y,data$z),]
dimensions <- c(length(unique(data$x)),length(unique(data$y)),length(unique(data$z)))

v <- array(data = value,dim=dimensions)

# Create subarrays that map indices back 
# to the original data
vX <- array( data=data$x,dim=dimensions )
vY <- array( data=data$y,dim=dimensions )
vZ <- array( data=data$z,dim=dimensions )

# Calculate isosurface,with level = 3
isosurface <-computeContour3d(vol = v,maxvol = max(v),level = 3) %>%
  as.data.frame() %>%
  rowwise() %>% 
  
  # Map the indices of the output the original x,z values
  mutate(x = vX[V1,V2,V3],y = vY[V1,z = vZ[V1,V3]) %>%
  ungroup()
 
isosurface
#>       V1    V2    V3     x     y     z
#>  1   3    1.2   2       11  -0.5    -3
#>  2   3    1     1.95     1  -2      -1
#>  3   2.8  1     2       11  -1       0
#> # … with 180 more rows

问题

您如何将这个顶点数据帧转换为一组导致类似输出的参数值?有没有这样做的功能

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)