在R中绘制多个不同尺寸和坐标的3D框

Draw multiple 3D boxes of different dimensions and coordinates in R

最近我无意中发现了 R 中的 rgl-Package,它可用于创建交互式 3d 图。现在我想在一个 3d 图中可视化一组框。盒子 B 具有笛卡尔坐标 B_coord=[x,y,z],对应于左下角和尺寸 B_dim=[x1,y1,z1].

显然,使用以下示例代码很容易绘制、缩放和定位一些立方体:

open3d()
printBox <- function(x,y,z,x1,y1,z1) {
  mycube <- scale3d(cube3d(),x1,y1,z1)
  wire3d(translate3d(mycube,x,y,z))
}
printBox(0,0,0,1,1,1)

使用此代码,框将移动到 x、y、z 并缩放到 x1、y1、z1。我的问题是如何使用相同的输入编写一个类似的函数,该函数根据框的左下角坐标定位框并绘制尺寸为 x1、y1、z1 的框。我不受 rgl 包和 R 的束缚,但我喜欢它的交互式 3d 视图。

谢谢你的想法!

我认为您的代码已经这样做了。为了让它更清楚,并解释那些 rgl 函数的作用,我展开了你的函数并对其进行了评论,并将其放在一个更说明性的示例中。

library(rgl)

open3d()

# create and plot a box at (x,y,z) of size (x1,y1,z1)
printBox <- function(x, y, z, x1, y1, z1) {
  mycube <- cube3d()                      # create a cube as mesh object   
  mycube <- scale3d(mycube, x1, y1, z1)   # now scale that object by x1,y1,z1
  mycube <- translate3d(mycube, x, y, z)  # now move it to x,y,z
  wire3d(mycube)                          # now plot it to rgl as a wireframe
}

# Display 5 boxes along a diagonal line
n <- 5
for (i in 1:n) {
  x <- i/n 
  y <- i/n
  z <- i/n
  sz <- 1/(2*n)
  printBox(x, y, z, sz,sz,sz )
}

axes3d()  # add some axes