我将尝试使用 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")
产生以下输出:
这仍然不可打印(这些点没有支持),但它应该可以帮助您开始。
关于r - 如何使 RGL 中的平面变厚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44193458/