Het maken van een 3D cilinder uit een veelhoek

stemmen
0

Ik heb een polygoon die ik zou willen converteren naar een cilindrische 3D-object voor een illustratie:

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)

voer

Ik kan mijn hoofd rond hoe je z-as toe met de waarden 2 en 5 bijvoorbeeld niet:

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

voer

Ik wil graag de gezichten gekleurd en verbonden te maken. Zoiets als de cilinders op Wikipedia illustraties , maar natuurlijk niet ronde eindigt, maar die polygonen in plaats daarvan. tringles3dof polygon3dfuncties zijn waarschijnlijk wat ik moet gebruiken als ik de RGL-pakket gebruikt, maar ik begrijp niet hoe om te herstructureren mijn data.frame. Ik heb geen behoefte om dit te doen in RGL. Dat was slechts het R-pakket die het meest haalbaar is voor deze taak leek. Hoe moet ik mijn gegevens reorganiseren om de 3D-cilinder plot?

De vraag is gesteld op 03/12/2019 om 00:00
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

U moet gebruiken extrude3dom een "extrusie" van uw polygoon te creëren. Bijvoorbeeld met xvolgens de vraag,

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

produceert dit beeld (na enige handmatige rotatie):

screenshot

Het maakt gebruik van x[-1,], omdat je het eerste hoekpunt aan het einde herhaald: het wil uniek hoekpunten.

De kleuring is wel grappig: de zeshoeken aan elk uiteinde te trekken, rgltrekt 4 driehoeken, en elk wordt beschouwd als een afzonderlijke vlak behoeve van kleuring. Als u effen kleuren daar willen, bedenk dan dat de uiteinden eerst worden getrokken: zo iets als

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

in plaats daarvan.

De andere grappige argument extrude3dis thickness: het veelvlak wordt gemaakt tussen z=0en z=thickness. Omdat je wilde z2-5, het thicknessis 3, en het resultaat moet worden vertaald tot 2 eenheden in z.

Er is ook cylinder3d, dat wordt gebruikt voor het genereren van buisvormige structuren, maar extrude3dis eenvoudiger te gebruiken als je alleen wilt uw polygoon te zien zijn in twee plaatsen haaks op de zijkanten.

antwoordde op 03/12/2019 om 01:18
bron van user

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