天道酬勤,学无止境

delaunay

是否可以在 scipy.spatial 的 Delaunay 中强制执行边缘(受约束的 delaunay 三角剖分)?(Is it possible to enforce edges (constrained delaunay triangulation) in scipy.spatial's Delaunay?)

问题 我正在试验 scipy.spatial 对 Qhull 的 Delaunay 三角剖分的实现。 是否可以以保留输入顶点定义的边的方式生成三角剖分? (编辑:即受约束的 Delaunay 三角剖分。)可以使用 Python 的三角形包来完成。 例如,在下图中,有几个三角形(蓝色)忽略了由顶点定义的边(红色)的位置。 有没有办法强制这些边,使它们在所有情况下都是三角剖分结果的一部分? 回答1 您正在寻找的是受约束的 Delaunay 三角剖分,不幸的是scipy.spatial实现不支持它。 正如您所指出的,三角形确实具有该功能——为什么不使用它呢?

2021-09-21 02:43:27    分类:技术分享    python   scipy   triangulation   delaunay

Delaunay Triangle 构造中没有删除重复的边(Duplicate edges not being removed in Delaunay Triangle construction)

问题 我正在尝试实施 Delaunay 三角剖分。 但是,我似乎在边缘创建重叠三角形时遇到了问题: 我的实现基于本网站上的描述。 我只是使用蛮力循环来检查集合中是否已经存在边。 v = vertex to be added edgeBuffer = []; for each triangle if v is in the triangle's circumscribed circle for each edge in the triangle check if it's already in edgeBuffer if not, add it remove triangle 我怀疑这是我算法的另一部分出错并导致这种情况发生,但我已经以非常简单的方式实现了所有内容。 这段代码有什么问题? 小提琴 回答1 如果边已经存在于边缓冲区中并且它不是超级三角形之后的第一个三角形,则需要从边缓冲区中删除它而不是跳过循环。 新计算需要这条边的顶点。 只需在其他缓冲区中重新插入顶点或从边缘缓冲区中删除边缘。

2021-09-20 02:35:18    分类:技术分享    javascript   delaunay

用单独的颜色填充 Matplotlib 三重图中的三角形(Filling triangles in Matplotlib triplot with individual colors)

问题 是否可以使用 pyplot 的 triplot 函数绘制由 scipy.spatial.Delaunay 生成的三角形列表,以便可以绘制每个三角形并用单独的颜色填充? 我创建的基本 python 脚本是 import numpy as np import matplotlib.pyplot as plt from scipy.spatial import Delaunay import matplotlib.image as mpimg h = 300 w = 1000 npts = 30 pts = np.zeros((npts,2)) pts[:,0] = np.random.randint(0,w,npts) pts[:,1] = np.random.randint(0,h,npts) tri = Delaunay(pts) plt.xlim(0, w) plt.ylim(0, h) # Determine the color used for each triangle based upon the orthocenter # of the triangle and the corresponding pixel color in a background image. centers = np.sum(pts[tri.simplices], axis=1

2021-09-18 10:03:34    分类:技术分享    python   matplotlib   delaunay

使用 3D Delaunay 三角剖分作为基础表示 LiDAR 表面?(Representing a LiDAR surface using the 3D Delaunay Triangulation as basis?)

问题 我想用 3D Delaunay 三角剖分来表示一个表面。 顶点必须是我的原始输入数据,来自市区的 LiDAR 点云。 因此,表面必须调整/适应输入信息。 实际上,我需要做的是以下内容: 我有一个来自市区的 3D 点云 (x, y, z); 我需要代表这个区域的表面; 我想做一个 3D delaunay 三角剖分(我用 CGAL 做了,我得到了四面体)并只识别代表表面的三角形(使用 CGAL 我有 4 个顶点,我无法定义哪些顶点代表表面三角形); 由于这些表面三角形是已知的,我需要给出一个点并得到包含这个给定点的三角形。 我想知道我需要哪个功能。 我看到了“3D 表面网格生成”、“3D Delaunay 三角剖分”、“点集的表面重建”、“3D 网格生成”和“3D Alpha 形状”。 但我不确定哪一个更适合我的工作/需要。 什么函数可以给我表面三角形(由我的初始数据集中的点表示)作为输出。 有人有建议吗? 回答1 您可以使用 Fade 2.5D,它使用三角形来网格化曲面点: http://www.geom.at/fade2d/html/ 该库可免费用于科学用途,您可以在 Example7 中找到代码示例(我是作者)。

2021-09-17 10:31:57    分类:技术分享    3d   cgal   delaunay   lidar

使用 Delaunay 三角剖分进行插值(Interpolation with Delaunay Triangulation)

问题 有一个形状像某种扭曲抛物面的浊点,我想使用 Delaunay 三角剖分来插值这些点。 我尝试了其他技术(例如样条曲线),但没有设法强制执行所需的行为。 我想知道是否有一种快速的方法来使用scipy.spatial.Delaunay的结果,我可以给出 (x,y) 坐标并获得单纯形(三角形)上点的 z 坐标。 从文档中看起来我可以拉出单纯形的索引,但我不确定如何从那里取出它。 回答1 您可以将 Delaunay 三角剖分与 Z 值集一起提供给 scipy.interpolate.LinearNDInterpolator,它应该为您完成这项工作。 如果你真的想自己做插值,你可以从 find_simplex 和 transform 中构建它。

2021-09-16 19:17:09    分类:技术分享    python   scipy   delaunay

CGAL:二维约束 Delaunay 三角剖分 - 向约束添加信息(CGAL: 2D Constrained Delaunay Triangulation - Adding information to constraints)

问题 可以将信息(如整数)附加到点,然后再将它们添加到三角仪对象。 我这样做是因为我一方面需要一个 int 标志,我稍后使用它来定义我的纹理坐标,另一方面我需要一个索引,以便我可以创建一个索引的 VBO。 http://doc.cgal.org/latest/Triangulation_2/Triangulation_2_2info_insert_with_pair_iterator_2_8cpp-example.html 但是我只想插入约束边缘而不是点。 如果我插入两个 CGAL 会返回奇怪的结果,因为点已被输入两次(一次作为点,一次作为受约束边缘的点)。 http://doc.cgal.org/latest/Triangulation_2/Triangulation_2_2constrained_8cpp-example.html 是否可以以与点信息相同的方式连接到“约束”,以便我只能使用此函数cdt.insert_constraint( Point(j,0), Point(j,6)); 在我迭代结果面之前? 后来当我遍历三角形时,我需要某种方式来访问我之前定义的 int 标志。 像这样,但不是在顶点上,而是在由约束边缘定义的线段的“末端”上: for(CDT::Finite_faces_iterator fit = m_cdt.finite_faces_begin()

2021-09-13 06:53:55    分类:技术分享    constraints   triangulation   cgal   delaunay

如何绘制等边彩色三角形?(How to plot an equilateral color triangle?)

问题 我想在 MATLAB 中制作一个类似于此图的颜色图: 我已经设法创建了创建顶点所需的所有点 [x,y],并且我有一张带有每个顶点颜色的地图,因此我可以获得以下内容。 但我不明白如何使轴工作。 到目前为止的代码: % Equilateral grid tcorner = [0.0, 0.5, 1.0; 0.0, 1.0*sqrt(3)/2, 0.0]; tg = triangle_grid( 1/0.05, tcorner ); tgx = tg(1,:); tgy = tg(2,:); % Create triangles tri = delaunay(tgx,tgy); % Plot h = trisurf(tri, tgx, tgy, colorvector); 和网格功能: function triangle_grid(n, tcorner) ng = ( ( n + 1 ) * ( n + 2 ) ) / 2; tg = zeros ( 2, ng ); p = 0; for i = 0 : n for j = 0 : n - i k = n - i - j; p = p + 1; tg(1:2,p) = ( i * t(1:2,1) + j * t(1:2,2) + k * t(1:2,3) ) / n; end end end 回答1

2021-09-12 10:06:00    分类:技术分享    matlab   plot   matlab-figure   triangulation   delaunay

Determine normal vectors of unknown 3D surface using scattered points

I have a set of (topologically simple) x,y,z points. Associated with each one of them is a scalar (s). I would like to visualize the results. How could I have the (unit) normal of each node determined and then scaled in accordance of s, or is there a way to get a spatially distributed surface plot (plotted parallel to the data points plane)? This is a sample of 3D points:

2021-09-08 06:56:32    分类:问答    matlab   3d   data-visualization   curve-fitting   delaunay

How to plot an equilateral color triangle?

I would like to make a color plot in MATLAB similar to this plot: I have managed to create all the points [x,y] needed in order to create the vertexes and I have a map with colors of each vertex, so I can get the following. But I do not get it how to make the axis work. Code so far: % Equilateral grid tcorner = [0.0, 0.5, 1.0; 0.0, 1.0*sqrt(3)/2, 0.0]; tg = triangle_grid( 1/0.05, tcorner ); tgx = tg(1,:); tgy = tg(2,:); % Create triangles tri = delaunay(tgx,tgy); % Plot h = trisurf(tri, tgx, tgy, colorvector); And the grid function: function triangle_grid(n, tcorner) ng = ( ( n + 1 ) * ( n + 2

2021-09-06 15:14:58    分类:问答    matlab   plot   matlab-figure   triangulation   delaunay

Getting a proper Delaunay triangulation of an annulus (using python)

I am trying to triangulate an annulus using the scipy.spatial.Delaunay() function, but cannot get the desired result. Here is my code: from scipy.spatial import Delaunay NTheta = 26 NR = 8 a0 = 1.0 #define base rectangle (r,theta) = (u,v) u=np.linspace(0, 2*np.pi, NTheta) v=np.linspace(1*a0, 3*a0, NR) u,v=np.meshgrid(u,v) u=u.flatten() v=v.flatten() #evaluate the parameterization at the flattened u and v x=v*np.cos(u) y=v*np.sin(u) #define 2D points, as input data for the Delaunay triangulation of U points2D=np.vstack([u,v]).T xy0 = np.vstack([x,y]).T Tri1 = Delaunay(points2D) #triangulate the

2021-09-03 11:40:24    分类:问答    python   numpy   scipy   triangulation   delaunay