问题描述
背景
我想从等值面采样值,使用 misc3d
中 R
包中的行进平方算法计算。本质上,问题如下:我有一个模拟,它采用三个参数并输出一个值。我想颠倒这个过程:我想输入结果并获得可能的参数组合。
我在 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 (将#修改为@)