Нарисуйте несколько 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 ответ:
Я думаю, что ваш код уже делает это. Чтобы сделать его более ясным и объяснить, что делают эти функции
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