gpt4 book ai didi

python-3.x - Delaunay 三角剖分简化 - scipy

转载 作者:行者123 更新时间:2023-12-04 14:13:19 38 4
gpt4 key购买 nike

我正在阅读 Delaunay (scipy)并遇到了代码:

import numpy as np
points = np.array([[0, 0], [0, 1.1], [1, 0], [1, 1]])

from scipy.spatial import Delaunay
tri = Delaunay(points)

import matplotlib.pyplot as plt
plt.triplot(points[:,0], points[:,1], tri.simplices.copy())
plt.plot(points[:,0], points[:,1], 'o')
plt.show()
据我所知,单纯形是将三角形推广到更高维度。
我不明白下面代码的含义,希望帮助理解它:
# Point indices and coordinates for the two triangles forming the triangulation:

tri.simplices
array([[3, 2, 0],
[3, 1, 0]], dtype=int32)

points[tri.simplices]
array([[[ 1. , 1. ],
[ 1. , 0. ],
[ 0. , 0. ]],
[[ 1. , 1. ],
[ 0. , 1.1],
[ 0. , 0. ]]])

Triangle 0 is the only neighbor of triangle 1, and it’s opposite to vertex 1 of triangle 1:


tri.neighbors[1]
# array([-1, 0, -1], dtype=int32)

points[tri.simplices[1,1]]
array([ 0. , 1.1])
谢谢!

最佳答案

此代码正在从包含两个三角形的四个顶点创建 Delaunay 三角剖分。三角剖分如下所示:
triangulation
代码首先定义数组中的四个顶点:

points = np.array([[0, 0], [0, 1.1], [1, 0], [1, 1]])
接下来,scipy 为这些点构建 Delaunay 三角剖分:
from scipy.spatial import Delaunay
tri = Delaunay(points)
现在,tri.simplices 包含 Delaunay 三角剖分中的三角形列表(在此 2D 情况下)。每个三角形表示为三个整数:每个值表示原始点数组中的一个索引。
tri.simplices
array([[3, 2, 0],
[3, 1, 0]], dtype=int32)
所以 [3,2,0] 是顶点 3 (1,1)、顶点 2 (1,0) 和顶点 0 (0,0) 之间的三角形。下一个代码连接点和tri数据结构来计算每个三角形的顶点坐标,消除间接:
points[tri.simplices]
array([[[ 1. , 1. ],
[ 1. , 0. ],
[ 0. , 0. ]],
[[ 1. , 1. ],
[ 0. , 1.1],
[ 0. , 0. ]]])
tri.neighbors 数组包含有关哪些三角形彼此相邻的信息。
tri.neighbors[1]
# array([-1, 0, -1], dtype=int32)
回想一下三角形 1(位置 1 中的 tri.simplices)具有顶点 [3,1,0]。三角形 0 是与顶点 1 相对的相邻三角形 1,这就是结果在第二个元素中的值为 0(对应于 [3,1,0] 中的 1)的原因。没有与顶点 3 相对的三角形(即,沿顶点 0 和 1 之间的边连接)或与顶点 0 相对的三角形,因此邻居数组在这些位置包含 -1。
最后是这段代码。
points[tri.simplices[1,1]]
array([ 0. , 1.1])
回想一下上面的tri.simplices数据结构,在simplex 1(即[3,1,0])的位置1中有一个值1,这行只是查找顶点1的坐标。
最后要注意的是,返回的单纯形中顶点的顺序不需要与这个原始示例相匹配,并且可以因版本而异。这是最近的一次运行,与下面评论中的观察结果相匹配,这与原始顶点顺序(在原始文档中提供)不一致:
enter image description here

关于python-3.x - Delaunay 三角剖分简化 - scipy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62608710/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com