1

我有一个 csv 文件,它对 9000x5000 分辨率的大坝照片的高程数据进行编码,我想生成一个可以在我的 3d 打印机上打印的 stl 文件。csv 有 3 个参数:XYZ,其中X&Y表示照片上的像素位置,Z是 处地形的高程Pixel (X,Y)。我想要一个相关照片的 3D stl 文件,其中包含由高程数据表示的角落、缝隙和山丘。我尝试使用 Python 库来做到这一点numpy-stl,但我意识到我对 stl 文件的了解不足以完成打印作业。任何有关我如何制作此文件或 stl 文件如何编码信息的信息都会非常有帮助。

4

1 回答 1

3

你所拥有的是vertices的集合。然而,STL 编码的是一个三角形列表。所以你需要做的是构建连接顶点的三角形网格。我假设您想自己编写代码,我将为您提供一些有关如何编写代码的提示。

首先,你应该弄清楚你的观点是否是结构化的。结构化是指点的xy坐标形成规则网格(这通常是从机载扫描获得数据的情况)。

如果点是结构化的

如果这些点是结构化的,那么您很有可能自己构建网格。表示P(i,j)(X[i],Y[j],Z[i,j]),即第一个坐标是x坐标列表中第i个数字的点,其第二个坐标是y坐标列表中的第j个数字,其第三个坐标是与前两个相对应的z坐标。1说明了。

*P(i,j)* 的解释

现在您需要确定三角形的方向。它们都应该是正向(逆时针)或负向(顺时针)。假设您决定负方向,您现在可以创建连接点P(i,j)P(i+1,j)P(i+1,j+1)的三角形。参见图2

第一个三角形

在下一步中,您可以创建具有相同方向的相邻三角形,例如P(i,j)P(i+1,j+1)P(i,j+1)。请参见图3中较暗的三角形。

第二个三角形

对所有合适的ij以相同的方式进行,您可以获得所有必要的三角形。

唯一缺少的部分是每个三角形的法线。您可以按照此答案中的建议使用叉积进行计算。

现在您已准备好将所有内容写入文件。按照Wikipedia上的描述,为每个三角形写下它的法线和三个顶点。

如果点不是结构化的

在这种情况下,如果不深入研究网格划分方法(您可能需要了解 Delaunay 三角剖分),您就没有多少机会创建网格。幸运的是,有一些库可用。例如,Fade2.5D是一个可以帮助您的 C++ 库,它对个人非商业研究是免费的。也许 Python 也有类似的东西。

于 2017-11-15T16:19:44.473 回答