Нарисуйте несколько 3D-блоков различных размеров и координат в R


Недавно я наткнулся на rgl-пакет в R, который можно использовать для создания интерактивных 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 2

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

Введите описание изображения здесь