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

时间:2015-01-30 14:33:21

标签: r 3d rgl

最近我偶然发现了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视图。

感谢您的想法!

1 个答案:

答案 0 :(得分:1)

我认为您的代码已经这样做了。为了使其更清晰,并解释那些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

enter image description here