Einen 3D-Zylinder aus einem Polygon

stimmen
0

Ich habe ein Polygon, das ich für eine Darstellung auf ein zylindrisches 3D-Objekt umwandeln möchte:

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)

Geben

Ich kann nicht meinen Kopf um, wie z-Achse mit den Werten 2 und 5 zum Beispiel hinzuzufügen:

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

Geben

Ich mag die Gesichter gefärbt und verbunden machen. So etwas wie die Zylinder auf Wikipedia Illustrationen , aber natürlich nicht rund Enden, aber diese Polygone statt. tringles3doder polygon3dFunktionen sind wahrscheinlich das, was sollte ich , wenn ich die rgl Paket verwendet, aber ich verstehe nicht, wie die Umstrukturierung meine data.frame. Ich brauche nicht diese in rgl zu tun. Das war nur das R - Paket , das für diese Aufgabe schien am ehesten machbar. Wie soll ich meine Daten zu zeichnen das 3D - Zylinder reorganisieren?

Veröffentlicht am 03/12/2019 um 00:00
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Sie müssen verwenden extrude3deine „Extrusion“ des Polygons zu erstellen. Zum Beispiel, mit xwie in der Frage definiert,

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

erzeugt das Bild (nach einiger manuellen Drehung):

Bildschirmfoto

Es verwendet x[-1,], weil Sie den ersten Scheitelpunkt am Ende wiederholt: es einzigartig Eckpunkte will.

Die Färbung ist irgendwie komisch: Die Sechsecke an jedem Ende zu ziehen, rglzieht 4 Dreiecken, und jeder wird als separate Fläche für den Zweck der Färbung behandelt. Wenn Sie Volltonfarben es wollen, denken Sie daran , dass die Enden zuerst gezogen werden: so Verwendung so etwas wie

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

stattdessen.

Das andere lustige Argument extrude3dist thickness: das Polyeder gezogen zwischen z=0und z=thickness. Da Sie wollten zvon 2 bis 5, die thickness3, und das Ergebnis braucht die Uebersetzung bis 2 Einheiten in z werden.

Es gibt auch cylinder3d, die zur Erzeugung von röhrenförmigen Strukturen verwendet wird, aber extrude3deinfacher zu bedienen ist , wenn Sie Ihre Polygon im rechten Winkel zu den Seiten an zwei Stellen zeigen wollen.

Beantwortet am 03/12/2019 um 01:18
quelle vom benutzer

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