Math 三维网格到粒子云的转换

Math 三维网格到粒子云的转换,math,3d,geometry,particles,Math,3d,Geometry,Particles,我需要将任意的三维三角网格转换为均匀分布的粒子云。 第一个想法是试图找到一种方法来填充一个3D三角形。然后填充网格的每个三角形,删除边上的重复粒子,但这很难,而且工作量太大。我希望有更多的数学方法 有谁能给我指出一种算法,它能帮助我正确地完成任务。。。好吧,至少大致如此 多亏了您可以使用GIS软件包或软件(如R)将三角网转换为光栅,然后在每个像素的中心检索代表该值的一个点。(示例在中) 编辑:如果不规则三维网格每{x,y}有多个高度,类似的方法是使用体素“网格”对网格进行采样,并保持每个体素一个

我需要将任意的三维三角网格转换为均匀分布的粒子云。 第一个想法是试图找到一种方法来填充一个3D三角形。然后填充网格的每个三角形,删除边上的重复粒子,但这很难,而且工作量太大。我希望有更多的数学方法

有谁能给我指出一种算法,它能帮助我正确地完成任务。。。好吧,至少大致如此


多亏了

您可以使用GIS软件包或软件(如R)将三角网转换为光栅,然后在每个像素的中心检索代表该值的一个点。(示例在中)


编辑:如果不规则三维网格每{x,y}有多个高度,类似的方法是使用体素“网格”对网格进行采样,并保持每个体素一个值。GRASS GIS可以获取三角网(3d网格)的顶点并将其转换为体素,然后返回到常规3d云。

有两个主要选项:

  • 网格的体素化。很容易实现网格到体素的转换,但由于无法实现统一的间距,因此转换不准确:立方体之间的距离可以是x、x*sqrt(2)或x*sqrt(3),具体取决于相邻立方体是否在同一平面上且相邻

  • 表面泊松圆盘采样。很难实现,缺乏研究材料和代码,但数学上非常正确。一些链接:


@J.B.:我建议你然后通过提取每个像素的值并将其用作z值,将“高度贴图”转换回常规3d网格。但是对于常规3d网格,一对{x,y}可以有多个z值,因此这不适用于我需要的复杂3d形状到3d点云的转换。还是我遗漏了什么?@J.B:我可能误解了你的问题。我是从地形表面的角度考虑的,但是你似乎在处理某种在同一{x,y}上具有多个高度的3D对象?如果是这样,可能会有一个类似的解决方案,使用体素对网格进行采样,并为每个体素返回一个点。正确,我想到的是任意3D网格(凹面、凸面,等等)。你说的体素。。。好主意,我来看看。我刚刚分析了解决方案。体素化会产生错误-粒子的间距不会均匀。这是因为同一平面上的立方体中心之间的距离为“a”,两个对角相邻立方体之间的距离为“a*sqrt(3)=a*1.73”,这会产生很大的局部误差(例如,想象体素化简单坡度)。如果您对均匀分布的粒子感到满意(与均匀分布的粒子相反)您可以构建三角形采样算法,例如。但从你的自我回答来看,你想要均匀分布。