2013-08-10 2 views
2

Я пытаюсь добавить меньший куб/меш (с указанной длиной стороны) в трехмерную диаграмму рассеяния. Я хотел бы, чтобы куб располагался в начале координат. Как мне это сделать? . Я играл с cube3d(), но я не могу показаться, чтобы позиционировать право куба, ни сделать его сетку (так что я могу видеть точки данных, содержащихся в нем Вот что у меня есть:рисовать куб в 3D-диаграмму рассеяния в RGL

library(rgl) 
x <- runif(100) 
y <- runif(100) 
z <- runif(100) 
plot3d(x,y,z, type="p", col="red", xlab="x", ylab="y", zlab="z", site=5, lwd=15) 

ответ

0

Вот что-то Я был вокруг для различных целей необходимо, чтобы вы начали

box <- data.frame(
    x = c(1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1), 
    y = c(1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1), 
    z = c(1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1)) 
segments3d(box$x, box$y, box$z, line_antialias = TRUE, col = "blue") 
points3d(0,0,0, col = "red", size = 5, point_antialias = TRUE) 
+0

Это помогает спасибо! Теперь я пытаюсь расположить ящик в одном из углов сюжета. Вы знаете, как я это сделаю? – user2249626

+0

Ну, мой примерный пробег проходит от -1 до 1 через x, y, z с красной точкой в ​​0,0,0, поэтому ящик представляет собой куб 2x единицы. Вы хотите перевести его так, чтобы угол куба был равен 0,0,0 (я не уверен, что вы сказали)? Если это так, сделайте 'box <- box + 1', затем replot. Или что-то подобное в зависимости от того, где вы хотите. Обратите внимание, что в примере координаты выстраиваются вертикально, поэтому вы рисуете от 1,1,1 до -1,1,1, затем от 1,1,1 до 1,1, -1 (попарно) –

2

Существует cube3d функция, которая по умолчанию возвращает объект списка (но не печатает его), что представляет собой куб, охватывающую х:.. [- 1, 1]; y: [- 1,1]; z: [- 1,1]. Если вы примените цвет к сторонам, по умолчанию он будет твердым. Вам нужно сделать прозрачные стороны «альфа» (см. ?rgl.materials). Итак, если мы начнем с t он используется:

library(rgl) 
x <- runif(100) 
y <- runif(100) 
z <- runif(100) 
plot3d(x,y,z, type="p", col="red", xlab="x", ylab="y", zlab="z", site=5, lwd=15) 
c3d <- cube3d(color="red", alpha=0.1) # nothing happens yet 
c3d # Look at structure 
shade3d(c3d) # render the object 

Это расширяет график до размеров по умолчанию прозрачного красного куба, упомянутого выше. Вершины находятся на месте хуг в первых трех строках $ Vb элемента:

c3b$vb 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] 
[1,] -1 1 -1 1 -1 1 -1 1 
[2,] -1 -1 1 1 -1 -1 1 1 
[3,] -1 -1 -1 -1 1 1 1 1 
[4,] 1 1 1 1 1 1 1 1 

Теперь, чтобы сделать еще один куб, который имеет одну из его вершин в начале координат, быстрый способ, которым я мог думать только о том, чтобы установить все -1 до 0:

c3d.origin <- cube3d(color="red", alpha=0.1) 
c3d.origin$vb [c3d.origin$vb == -1] <- 0 
shade3d(c3d.origin) 
rgl.snapshot("cubes3d.png") 

enter image description here

Смежные вопросы