我有一个多边形,想要将其转换为圆柱形3D对象以进行说明:
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)
例如,我无法理解如何添加值为2和5的z轴:
library(rgl)
lines3d(x = rep(x$x, 2), y = rep(x$y, 2), z = rep(c(2, 5), each = nrow(x)))
我想使面孔变色和关联。像cylinders on Wikipedia illustrations之类的东西,但自然不是圆端,而是那些多边形。如果使用rgl包,可能应该使用tringles3d
或polygon3d
函数,但是我不知道如何重组data.frame。我不需要在rgl中执行此操作。那只是R包,对于该任务而言似乎是最可行的。我应该如何重组数据以绘制3D圆柱体?
答案 0 :(得分:1)
您需要使用extrude3d
创建多边形的“拉伸”。
例如,使用问题中定义的x
,
x[-1,] %>%
extrude3d(thickness = 3, material = list(col = rainbow(14)),
meshColor = "faces") %>%
translate3d(x = 0, y = 0, z = 2) %>%
shade3d()
生成此图像(经过一些手动旋转):
它使用x[-1,]
,因为您在末尾重复了第一个顶点:它需要唯一的顶点。
着色很有趣:在每个末端绘制六边形,rgl
绘制4个三角形,并且每个着色目的都被视为单独的面。如果要在此处使用纯色,请记住首先绘制末端:因此请使用
material = list(col = rainbow(8)[c(1,1,1,1,2,2,2,2:8)])
相反。
extrude3d
的另一个有趣的论点是thickness
:多面体绘制在z=0
和z=thickness
之间。由于您希望z
从2到5,所以thickness
是3,因此需要将结果转换为z中的2个单位。
还有cylinder3d
,用于生成管状结构,但是如果只希望多边形在与侧面成直角的两个位置显示,extrude3d
则更易于使用。