Faire un cylindre 3D d'un polygone

voix
0

J'ai un polygone que je voudrais convertir en un objet 3D cylindrique pour une illustration:

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)

entrez

Je ne peux pas obtenir ma tête sur la façon d'ajouter l'axe z avec des valeurs 2 et 5 par exemple:

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

entrez

Je voudrais faire les visages colorés et connectés. Quelque chose comme les cylindres sur les illustrations de Wikipédia , mais finit naturellement pas rond, mais ces polygones au lieu. tringles3dou les polygon3dfonctions sont probablement ce que je devrais utiliser si je le paquet RGL, mais je ne comprends pas comment restructurer mon data.frame. Je ne ai pas besoin de le faire dans RGL. C'était juste le paquet R qui , pour cette tâche semblait plus réalisable. Comment dois - je réorganiser mes données pour tracer le cylindre 3D?

Créé 03/12/2019 à 00:00
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Vous devez utiliser extrude3dpour créer une « extrusion » de votre polygone. Par exemple, avec xtel que défini dans la question,

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

produit cette image (après une rotation manuelle):

capture d'écran

Il utilise x[-1,], parce que vous répétiez le premier sommet à la fin: il veut des sommets uniques.

La coloration est plutôt drôle: dessiner des hexagones à chaque extrémité, rgltire 4 triangles, et chacun est traité comme une face distincte aux fins de coloration. Si vous voulez il y a des couleurs unies, rappelez - vous que les extrémités sont dessinées en premier: donc utiliser quelque chose comme

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

au lieu.

L'autre argument drôle extrude3dest thickness: le polyèdre est établi entre z=0et z=thickness. Puisque vous vouliez zde 2 à 5, l' thicknessest 3, et le résultat doit être traduit en 2 unités en z.

Il y a aussi cylinder3d, qui est utilisé pour générer des structures tubulaires, mais extrude3dest plus simple à utiliser si vous ne souhaitez que votre polygone apparaisse dans deux endroits à angle droit par rapport aux côtés.

Créé 03/12/2019 à 01:18
source utilisateur

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