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

3
最近我在R语言中发现了rgl包,可以用来创建交互式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个回答

3

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


你如何使用“naive”实心立方体制作相同的图形?很抱歉让这篇帖子复活了,我刚看到它的发布日期。 - Nebulloyd
哈。已经有3-4年没碰rgl了。我得去研究一下。 - Mike Wise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接