r - 如何使 RGL 中的平面变厚?

标签 r plot rgl

我将尝试使用 3D 打印数据为二元分类示例制作一些漂亮的视觉插图。

这是我的 3D 图:

require(rgl)
#Get example data from mtcars and normalize to range 0:1
fun_norm <- function(k){(k-min(k))/(max(k)-min(k))}
x_norm <- fun_norm(mtcars$drat)
y_norm <- fun_norm(mtcars$mpg)
z_norm <- fun_norm(mtcars$qsec)

#Plot nice big spheres with rgl that I hope will look good after 3D printing
plot3d(x_norm, y_norm, z_norm, type="s", radius = 0.02, aspect = T)
#The sticks are meant to suspend the spheres in the air
plot3d(x_norm, y_norm, z_norm, type="h", lwd = 5, aspect = T, add = T)
#Nice thick gridline that will also be printed
grid3d(c("x","y","z"), lwd = 5)

接下来,我想添加一个 z=0 平面,灵感来自 this blog here描述 Ian Walker 编写的 r2STL。它应该是将所有东西结合在一起的打印结构的基础。

planes3d(a=0, b=0, c=1, d=0)

但是,它没有体积,它是一 block 高度=0的薄板。我希望它能够为打印结构奠定坚实的基础,这意味着将所有内容放在一起(查看前面提到的博客以了解更多详细信息,他的示例很棒)。如何增加 z=0 平面的厚度以达到相同的效果?

这是导出为 STL 的最后一步:

writeSTL("test.stl")

使用开源 Meshlab 可以很好地查看最终产品。正如 Ian 在博客中推荐的那样。

补充说明:我注意到薄平面也与我在立方体的 -z 面上添加的网格分开并且是 float 的。这也可能会导致打印时出现问题。如何将网格与 z=0 平面合并? (我会将 STL 文件发送给一位 friend ,他将为我打印,我想让他的事情尽可能简单)

最佳答案

你无法让平面变得更厚。您可以制作一个实体形状(extrude3d() 是要使用的函数)。它不会像平面那样适应边界框,因此您需要最后绘制它。

例如,

example(plot3d)
bbox <- par3d("bbox")
slab <- translate3d(extrude3d(bbox[c(1,2,2,1)], bbox[c(3,3,4,4)], 0.5),
                    0,0, bbox[5])
shade3d(slab, col = "gray")

产生以下输出:

sample output

这仍然不可打印(这些点没有支持),但它应该可以帮助您开始。

关于r - 如何使 RGL 中的平面变厚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44193458/

相关文章:

r - R中使用ifelse()语句获取不同类的对象

python - 如何删除 matplotlib 中轴值中的指数文本?

python - numpy.piecewise 中的多个部分

plot - 按列表中点的顺序绘制颜色图 - Mathematica

r - 为什么我的 3D 绘图没有显示在 R Studio 绘图查看器中?

r - 根据数据框中的自定义规则计算总和

r - 在ggplot2中的 map 上以一定半径绘制圆

r - 如何在 Shiny 页面内呈现 scatter3d 而不是弹出窗口

r - 查找加载的命名空间的库位置

R - 无法安装包 "rgl"