【问题标题】:Making a 3D cylinder out of a polygon用多边形制作 3D 圆柱体
【发布时间】:2023-03-30 23:37:02
【问题描述】:

我有一个多边形,我想将其转换为一个圆柱形 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 包,我应该使用tringles3dpolygon3d 函数,但我不明白如何重构我的data.frame。我不需要在 rgl 中执行此操作。这只是似乎最适合这项任务的 R 包。我应该如何重新组织我的数据来绘制 3D 圆柱体?

【问题讨论】:

    标签: r 3d rgl


    【解决方案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=0z=thickness 之间绘制。由于您希望 z 从 2 变为 5,因此 thickness 为 3,结果需要在 z 中向上平移 2 个单位。

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

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      相关资源
      最近更新 更多