如何使 RGL 中的平面变厚?
How do I make planes in RGL thicker?
我将尝试使用 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)
但是,它没有体积,它是一个高度为0的薄板。我希望它为印刷结构形成一个坚实的基础,这意味着将所有东西放在一起(查看上述博客了解更多细节,他的例子很棒)。如何增加 z=0 平面的厚度以达到相同的效果?
这是导出为 STL 的最后一步:
writeSTL("test.stl")
使用 Ian 在博客中推荐的开源 Meshlab 可以非常好地查看最终产品。
附加说明:我注意到薄平面也与我在立方体的 -z 面上添加的网格分开并且是浮动的。这也可能导致打印时出现问题。如何将网格与 z=0 平面合并? (我会把 STL 文件发给一个朋友,他会帮我打印,我想让他尽可能轻松)
你不能让飞机变厚。您可以制作一个实体形状(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")
产生这个输出:
这仍然不可打印(点数没有支持),但它应该可以帮助您入门。
在 matlib
包中,有一个函数 regvec3d()
绘制一个向量 space 表示 2-预测多元回归模型。函数结果的 plot 方法有一个参数 show.base
,它绘制基本 x1-x2 平面,如果 show.base >0
.
则绘制得更厚
这是一个简单的 hack,只是以较小的偏移绘制飞机的第二个版本。也许这对您的应用程序来说已经足够了。
if (show.base > 0) planes3d(0, 0, 1, 0, color=col.plane, alpha=0.2)
if (show.base > 1) planes3d(0, 0, 1, -.01, color=col.plane, alpha=0.1)
我将尝试使用 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)
但是,它没有体积,它是一个高度为0的薄板。我希望它为印刷结构形成一个坚实的基础,这意味着将所有东西放在一起(查看上述博客了解更多细节,他的例子很棒)。如何增加 z=0 平面的厚度以达到相同的效果?
这是导出为 STL 的最后一步:
writeSTL("test.stl")
使用 Ian 在博客中推荐的开源 Meshlab 可以非常好地查看最终产品。
附加说明:我注意到薄平面也与我在立方体的 -z 面上添加的网格分开并且是浮动的。这也可能导致打印时出现问题。如何将网格与 z=0 平面合并? (我会把 STL 文件发给一个朋友,他会帮我打印,我想让他尽可能轻松)
你不能让飞机变厚。您可以制作一个实体形状(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")
产生这个输出:
这仍然不可打印(点数没有支持),但它应该可以帮助您入门。
在 matlib
包中,有一个函数 regvec3d()
绘制一个向量 space 表示 2-预测多元回归模型。函数结果的 plot 方法有一个参数 show.base
,它绘制基本 x1-x2 平面,如果 show.base >0
.
这是一个简单的 hack,只是以较小的偏移绘制飞机的第二个版本。也许这对您的应用程序来说已经足够了。
if (show.base > 0) planes3d(0, 0, 1, 0, color=col.plane, alpha=0.2)
if (show.base > 1) planes3d(0, 0, 1, -.01, color=col.plane, alpha=0.1)