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

80
10

Недавно я наткнулся на rgl-Package в 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-просмотр.

Спасибо за ваши идеи!

спросил(а) 2021-01-19T19:39:11+03:00 9 месяцев, 1 неделя назад
1
Решение
65

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

ответил(а) 2021-01-19T19:39:11+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема