我有一个csv文件,用于编码大坝的9000x5000分辨率照片的高程数据,我想生成一个可以在我的3D打印机上打印的stl文件。 csv有3个参数:X
,Y
和Z
,其中X
& Y
表示照片上的像素位置,Z
表示Pixel (X,Y)
处地形的高程。
我想要一个有问题的照片的3D stl文件,其中包含由高程数据表示的角落,缝隙和山丘。我试图使用Python库numpy-stl
来做这件事,但我意识到我对stl文件不够了解以完成打印作业。
有关如何创建此文件或stl文件如何编码信息的任何信息都将非常有用。
答案 0 :(得分:1)
你拥有的是顶点的集合。但是,STL编码的是三角形列表。所以你需要做的是构造连接顶点的三角形网格。我假设您想自己编写代码,我会为您提供一些有关如何执行此操作的提示。
首先,您应该了解您的积分是否有条理。通过结构化我的意思是 x - 和 y - 坐标的坐标形成一个规则的网格(这通常是从机载扫描获得数据的情况)。 / p>
如果这些点是结构化的,那么你有可能自己构建网格。表示 P(i,j)点(X [i],Y [j],Z [i,j]),即第一个坐标的点是 x -coordinates列表中的 i -th数字,其第二个坐标是 j -th数字列表中的< em> y -coordinates,其第三个坐标是与前两个相对应的 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 进行相同的处理,你可以获得所有必要的三角形。
唯一缺失的部分是每个三角形的法线。您可以使用cross-product中建议的this answer进行计算。
现在您已准备好将所有内容写入您的文件。按照Wikipedia的描述,为每个三角形写下它的法线和三个顶点。
在这种情况下,如果没有对网格划分方法进行重要研究,您就没有太多机会创建网格(您可能需要了解Delaunay三角剖分)。幸运的是,有一些库可用。例如,Fade2.5D是一个可以帮助您的C ++库,它可以免费用于个人非商业研究。也许Python也有类似的东西。