用多边形制作3D圆柱

时间:2019-12-02 21:00:45

标签: r 3d rgl

我有一个多边形,想要将其转换为圆柱形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)

enter image description here

例如,我无法理解如何添加值为2和5的z轴:

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

enter image description here

我想使面孔变色和关联。像cylinders on Wikipedia illustrations之类的东西,但自然不是圆端,而是那些多边形。如果使用rgl包,可能应该使用tringles3dpolygon3d函数,但是我不知道如何重组data.frame。我不需要在rgl中执行此操作。那只是R包,对于该任务而言似乎是最可行的。我应该如何重组数据以绘制3D圆柱体?

1 个答案:

答案 0 :(得分:1)

您需要使用extrude3d创建多边形的“拉伸”。 例如,使用问题中定义的x

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

生成此图像(经过一些手动旋转):

screenshot

它使用x[-1,],因为您在末尾重复了第一个顶点:它需要唯一的顶点。

着色很有趣:在每个末端绘制六边形,rgl绘制4个三角形,并且每个着色目的都被视为单独的面。如果要在此处使用纯色,请记住首先绘制末端:因此请使用

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

相反。

extrude3d的另一个有趣的论点是thickness:多面体绘制在z=0z=thickness之间。由于您希望z从2到5,所以thickness是3,因此需要将结果转换为z中的2个单位。

还有cylinder3d,用于生成管状结构,但是如果只希望多边形在与侧面成直角的两个位置显示,extrude3d则更易于使用。

>