Fazendo um cilindro 3D fora de um polígono

votos
0

Eu tenho um polígono que eu gostaria de converter para um objeto 3D cilíndrico para uma ilustração:

x <- structure(list(x = c(7.99, 6.25, -1.77, -1.8, -0.48, 3.93, 7.99
), y = c(2.84, 2.31, 2.43, 2.98, 3.19, 3.26, 2.84)), row.names = c(NA, 
7L), class = data.frame)

plot(x$x, x$y, type = n)
polygon(x$x, x$y, col = blue)
points(x$x, x$y)

digite

Eu não posso colocar minha cabeça em torno de como adicionar z-axis com valores 2 e 5, por exemplo:

library(rgl)
lines3d(x = rep(x$x, 2), y = rep(x$y, 2), z = rep(c(2, 5), each = nrow(x)))

digite

Eu gostaria de fazer as faces coloridas e conectadas. Algo como os cilindros na Wikipedia ilustrações , mas acaba, naturalmente, não redondos, mas esses polígonos em vez. tringles3dou polygon3dfunções são, provavelmente, o que devo usar se eu usasse o pacote RGL, mas eu não entendo como para reestruturar minha data.frame. Eu não preciso fazer isso em RGL. Isso foi apenas o pacote R que parecia mais viável para essa tarefa. Como devo reorganizar meus dados para traçar o cilindro 3D?

Publicado 03/12/2019 em 00:00
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Você precisa usar extrude3dpara criar um "extrusão" de seu polígono. Por exemplo, com x, tal como definido na pergunta,

x[-1,] %>% 
  extrude3d(thickness = 3, material = list(col = rainbow(14)),
            meshColor = "faces") %>%
  translate3d(x = 0, y = 0, z = 2) %>%
  shade3d()

produz esta imagem (depois de alguma rotação manual):

Screenshot

Ele usa x[-1,], porque você repetiu o primeiro vértice no final: ele quer vértices únicos.

A coloração é engraçado: desenhar os hexágonos em cada extremidade, rgldesenha 4 triângulos, e cada um é tratado como uma cara separada para a finalidade da coloração. Se você quiser cores sólidas lá, lembre-se que as extremidades são atraídos primeira: então usar algo como

material = list(col = rainbow(8)[c(1,1,1,1,2,2,2,2:8)])

em vez de.

O outro argumento engraçado extrude3dé thickness: poliedro é desenhada entre z=0e z=thickness. Desde que você queria z2-5, a thicknessé 3, eo resultado precisa ser traduzido até 2 unidades em z.

Há também cylinder3d, que é usado para a geração de estruturas tubulares, mas extrude3dé mais simples de usar se você só deseja seu polígono para aparecer em dois lugares em ângulos retos para os lados.

Respondeu 03/12/2019 em 01:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more