标签: mesh

曲面重建中如何避免孔洞填充?

我正在使用泊松曲面重建算法从点重建三角网格曲面。然而,泊松总是会生成一个无懈可击的表面,它通过插值填充所有孔。

对于一些由于数据丢失而导致的小孔,这种孔填充是可取的。但对于一些大孔,我不想填充孔,只希望表面保持开放。

演示

上图展示了我的想法,左边是法线的点集,右边是重建的曲面。我希望该表面的顶部保持开放,而不是当前的水密结果。

谁能给我一些建议,如何在泊松曲面重建中保留这些大洞?或者有其他算法可以解决这个问题吗?

PS 根据这个问题的公认答案,我理解表面重建算法可以分为显式重建算法和隐式重建算法。泊松是隐式的,显式的自然可以处理大洞问题。但由于我拥有的点数据大多稀疏且嘈杂,因此我更喜欢像泊松这样的隐式数据。

algorithm graphics geometry mesh

5
推荐指数
1
解决办法
1286
查看次数

了解 Qt3D 创建的网格

我创建了一个像这样的 Qt3D 网格:

Qt3DCore::QEntity *newEntity = new Qt3DCore::QEntity();
Qt3DExtras::QConeMesh *mesh =new Qt3DExtras::QConeMesh();
mesh->setTopRadius(0.2);
mesh->setBottomRadius(1.0);
mesh->setLength(2.0);
for(int i = 0; i < mesh->geometry()->attributes().size(); ++i) {
    mesh->geometry()->attributes().at(i)->buffer()->setSyncData(true); // To have access to data
}
newEntity->addComponent(mesh);
Run Code Online (Sandbox Code Playgroud)

创建的网格如下所示:

锥网 锥形网格,另一种观点


在代码的后面,我尝试以STL 二进制格式导出上述网。为此,我提取了实体的几何变换组件:

Qt3DCore::QComponent *compoMesh = nullptr; // place holder for mesh geometry of entity
Qt3DCore::QComponent *compoTran = nullptr; // place holder for mesh transformation of entity
QVector<Qt3DCore::QComponent *> compos = newEntity->components();
for(int i = 0; i < compos.size(); …
Run Code Online (Sandbox Code Playgroud)

qt mesh qt3d stl-format

5
推荐指数
1
解决办法
1564
查看次数

如何在 3d 点中使用 delaunay 三角剖分?

我了解如何在 2d 点中使用 delaunay 三角剖分?
但是如何在 3d 点中使用 delaunay 三角剖分呢?
我的意思是我想生成表面三角形网格而不是四面体网格,那么如何使用 delaunay 三角剖分来生成 3d 表面网格?
请给我一些提示。

mesh polygon delaunay triangulation computational-geometry

5
推荐指数
1
解决办法
1万
查看次数

使用 scikit-fmm 或 gdist 3d 三角形网格上的测地距离

我正在尝试评估 TOSCA 数据集上的测地距离矩阵。例如以下 3d 网格 -
在此输入图像描述

我尝试过使用两个 python 实现。

  1. 第一个是scikit-fmm,它似乎根本不适用于 3d 结构(我是对的吗?),因此不适合该任务。
  2. 另一个是gdist包,不幸的是,它适用于他们提供的玩具示例,但不适用于我的网格,该网格只有 10,000 个面和 5000 个顶点。
    使用 gdist 库时出现以下错误:

    Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
    --------CODE SNIPPET----------
    c = sio.loadmat('raw_data/TOSCA/cat0.mat')
    c = c['surface'][0][0]
    X = c[0]
    Y = c[1]
    Z = c[2]
    TRIV = c[3].astype(np.int32)
    vertices = np.array(zip(X, Y, Z)).astype(np.float64)
    vertices = np.reshape(vertices, (vertices.shape[0], 3))
    src = np.array([1], dtype=np.int32)
    trg = np.array([2], dtype=np.int32)
    
    np.random.shuffle(TRIV)
    
    a = gdist.compute_gdist(vertices,TRIV[:5000], source_indices = src, …
    Run Code Online (Sandbox Code Playgroud)

python mesh distance scikit-learn

5
推荐指数
1
解决办法
1515
查看次数

Matlab:网格数较少的“mesh()”图

假设data是一个大小为 的矩阵129 * 129

通过使用

mesh(data, 'FaceColor', 'none', 'EdgeColor', 'black')

我们得到类似的东西

在此输入图像描述

我们可以发现网格相当密集。我想要相同的图形,但网格线数量较少,例如

在此输入图像描述


data例如,当然可以绘制较小的图data(1:10:end, 1:10:end)。但这样一来,剧情就不再像以前那么准确了。

另一个例子是plot(..., 'MarkerIndices', ...)。这可以为您提供标记数量较少的图,而无需修改图。https://www.mathworks.com/help/matlab/creating_plots/create-line-plot-with-markers.html

matlab plot mesh figure matlab-figure

5
推荐指数
1
解决办法
567
查看次数

3D 网格的布尔几何减法

我正在使用 pywavefront 从 .obj 解析 3D 网格,它给我顶点、面和法线。我想计算减去另一个网格的剩余面积。

在计算体积之后,我想知道如何对网格执行相交和相减等操作。

python 3d geometry mesh

5
推荐指数
1
解决办法
5179
查看次数

从顶点坐标创建三角形网格

给定一组带有坐标x和的二维数据点y(左图),是否有一种简单的方法可以在其上构造三角形网格(右图)?即返回一个元组列表,指示哪些顶点已连接。在此输入图像描述该解决方案并不唯一,但任何合理的网格就足够了。

geometry numpy mesh scipy

5
推荐指数
2
解决办法
3172
查看次数

Matplotlib 投影 3d 水平问题

我遇到了来自轮廓f()的非常奇怪的错误。我想为 3D 投影设置特定的最小值和最大值,但是当我尝试设置大于 -+max(Z) 的值时,我收到错误消息:

文件“C:\ Program Files \ Python38 \ lib \ site-packages \ mpl_toolkits \ mplot3d \ art3d.py”,第768行,在do_3d_projection zzs,segments_2d,self._facecolors2d,self._edgecolors2d,idxs =
ValueError:没有足够的值解压(预期为 5,实际为 0)

lmin,lmax = -1, 1 仅适用或更低的值

这是示例:

from pylab import *

mpName = 'seismic'

X = np.linspace(-np.pi, np.pi, 192)
Y = np.linspace(-np.pi, np.pi, 192)
X, Y = np.meshgrid(X, Y)
Z = np.sin(X*Y)


lmin,lmax = -2, 2 #
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contourf(Y, X, Z, cmap='RdBu', zdir='z', offset=np.pi, levels=np.linspace(lmin,lmax,20))
ax.set_xlim3d(-np.pi, np.pi)
ax.set_ylim3d(-np.pi, np.pi)
ax.set_zlim3d(-np.pi, np.pi) …
Run Code Online (Sandbox Code Playgroud)

python mesh matplotlib contourf

5
推荐指数
1
解决办法
370
查看次数

如何对不规则形状的晶格进行三角剖分?

我有一个 XYZ 点列表,它们排列在 XY 平面上均匀间隔的晶格中,如下所示(例如):

点排列成格子

我想用三角形“平铺”这些点之间的空间,将一个点连接到其直接(最多)八个邻居中的两个,如下所示:

与之前相同的点格,但现在用三角形平铺

我如何在 Python 中有效地完成此操作? 一种简单的方法会检查每个点是否有八个可能的三角形,但由于考虑了许多重复的三角形,这是非常低效的。考虑每个点右下角可能存在的三角形之类的事情,会错过一些三角形。这个问题有通用的算法吗?

我认为 Delaunay 三角剖分是不合适的,因为它总是会创建凸三角剖分。




语境

该三角测量是根据 LIDAR 高度数据生成建筑物 3D 网格过程中的一个步骤。当我使用“常用”算法从点云(泊松、旋转球)生成网格时,我最终得到的网格中有许多孔(尤其是在塔或墙等陡峭的斜坡上)。我希望通过认识到点云在 XY 平面上形成均匀间隔的晶格并从该角度对其进行三角测量(如上所述),我可以解决许多此类孔问题。

本地点云高度数据 从上方看到的当地教堂点云的一部分

python algorithm mesh triangulation

5
推荐指数
1
解决办法
249
查看次数

如何将 3D xyz 矢量几何投影到与三角表面的表面法线正交的平面上?右

我正在使用 OLS 求解方程,该方程返回 x/y/z 表面网格上的计时点。我可以按照下面概述的方法求解速度和方向性。问题是,我的矢量与表面网格不平行,并且我不确定使其朝正确方向所需的正确变换。

文献指出:

“为了在 3D 几何中实现矢量的可视化......如果在矢量计算中仅使用表面数据,则传导速度矢量会以几何方式投影到与表面法线正交的平面中。此约束修正了指向内部或内部的矢量。表面之外”

我不知道该怎么做。

代表数据:

library(plotly)
library(dplyr)
Run Code Online (Sandbox Code Playgroud)
tri_list <- list(surf_tri = structure(c(1L, 1L, 4L, 8L, 11L, 12L, 17L, 6L, 
19L, 13L, 3L, 5L, 22L, 1L, 26L, 18L, 18L, 8L, 21L, 14L, 27L, 
4L, 14L, 7L, 6L, 29L, 22L, 16L, 23L, 26L, 3L, 28L, 2L, 13L, 12L, 
31L, 33L, 35L, 32L, 28L, 33L, 31L, 20L, 9L, 36L, 12L, 29L, 20L, 
31L, 27L, 17L, 26L, 8L, 15L, 9L, 29L, 9L, 35L, 15L, 11L, 16L, 
16L, 38L, …
Run Code Online (Sandbox Code Playgroud)

r mesh vector-graphics triangulation

5
推荐指数
0
解决办法
241
查看次数