我有一个 csv 文件,它对 9000x5000 分辨率的大坝照片的高程数据进行编码,我想生成一个可以在我的 3d 打印机上打印的 stl 文件。csv 有 3 个参数:X
、Y
和Z
,其中X
&Y
表示照片上的像素位置,Z
是 处地形的高程Pixel (X,Y)
。我想要一个相关照片的 3D stl 文件,其中包含由高程数据表示的角落、缝隙和山丘。我尝试使用 Python 库来做到这一点numpy-stl
,但我意识到我对 stl 文件的了解不足以完成打印作业。任何有关我如何制作此文件或 stl 文件如何编码信息的信息都会非常有帮助。
1 回答
你所拥有的是vertices的集合。然而,STL 编码的是一个三角形列表。所以你需要做的是构建连接顶点的三角形网格。我假设您想自己编写代码,我将为您提供一些有关如何编写代码的提示。
首先,你应该弄清楚你的观点是否是结构化的。结构化是指点的x和y坐标形成规则网格(这通常是从机载扫描获得数据的情况)。
如果点是结构化的
如果这些点是结构化的,那么您很有可能自己构建网格。表示P(i,j)点(X[i],Y[j],Z[i,j]),即第一个坐标是x坐标列表中第i个数字的点,其第二个坐标是y坐标列表中的第j个数字,其第三个坐标是与前两个相对应的z坐标。图1说明了。
现在您需要确定三角形的方向。它们都应该是正向(逆时针)或负向(顺时针)。假设您决定负方向,您现在可以创建连接点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中较暗的三角形。
对所有合适的i和j以相同的方式进行,您可以获得所有必要的三角形。
唯一缺少的部分是每个三角形的法线。您可以按照此答案中的建议使用叉积进行计算。
现在您已准备好将所有内容写入文件。按照Wikipedia上的描述,为每个三角形写下它的法线和三个顶点。
如果点不是结构化的
在这种情况下,如果不深入研究网格划分方法(您可能需要了解 Delaunay 三角剖分),您就没有多少机会创建网格。幸运的是,有一些库可用。例如,Fade2.5D是一个可以帮助您的 C++ 库,它对个人非商业研究是免费的。也许 Python 也有类似的东西。