假设我有一个区域区域,我执行一个受约束的 Delaunay Rufat's Shewchuk 三角(python)的实现
import numpy as np
import triangle as tr
import matplotlib.pyplot as plt
# data
vertices = [[0, 0], [5, 0], [5, 5], [0, 5],
[1, 1], [2, 1], [2, 2], [1, 2],
[3, 3], [4, 3], [4, 4], [3, 4],
[2, 3], [1, 3],
[4, 1], [4, 2]]
segments = [[0, 1], [1, 2], [2, 3], [3, 0],
[4, 5], [5, 6], [6, 7], [7, 4],
[8, 9], [9, 10], [10, 11], [11, 8],
[6, 12], [12, 13], [7, 13],
[5, 14], [14, 15], [6, 15]]
regions = [[1.5, 1.5, 1, 0],
[3.5, 3.5, 3, 0],
[1.5, 2.5, 2, 0],
[3, 1.5, 4, 0],]
A = dict(vertices=vertices, segments=segments, regions=regions)
B = tr.triangulate(A, 'pAn')
tr.compare(plt, A, B)
plt.show()
用字典
B
看起来像:
{'vertices': array([[0., 0.],
[5., 0.],
[5., 5.],
[0., 5.],
...
[1., 3.],
[4., 1.],
[4., 2.]]),
'vertex_markers': array([[1],
[1],
[1],
[1],
...
[0],
[0],
[0]], dtype=int32),
'triangles': array([[ 0, 4, 7],
[ 4, 0, 5],
[ 7, 5, 6],
[ 5, 7, 4],
...
[ 2, 10, 9],
[ 9, 15, 2],
[11, 2, 3],
[ 8, 11, 12]], dtype=int32),
'triangle_attributes': array([[0.],
[0.],
[1.],
[1.],
...
[0.],
[0.],
[0.]]),
'neighbors': array([[ 3, 5, 1],
[ 4, 3, 0],
[12, 10, 3],
...
[15, 22, 18],
[-1, 11, 21],
[11, 9, 20]], dtype=int32),
'segments': array([[ 1, 0],
[ 2, 1],
[ 3, 2],
...
[ 5, 14],
[14, 15],
[ 6, 15]], dtype=int32),
'segment_markers': array([[1],
[1],
[1],
[1],
...
[0],
[0]], dtype=int32),
'regions': array([[1.5, 1.5, 1. , 0. ],
[3.5, 3.5, 3. , 0. ],
[1.5, 2.5, 2. , 0. ],
[3. , 1.5, 4. , 0. ]])}
i) 我如何迭代每个区域 1-4(不是 0);
ii) 收获 bounds 该区域的每个片段;
iii) 提取每段的2个顶点的坐标;随着
iv) 该区域的属性加上线段另一侧区域的属性?
Thufar 我有:
for i, region in enumerate(regions):
region_triangles = np.where(Tr['triangle_attributes'] == i+1)[0]
region_segments = []
for tri in region_triangles:
tri_vertices = Tr['triangles'][tri]
for j in range(3):
seg = sorted([tri_vertices[j], tri_vertices[(j+1)%3]])
if seg not in region_segments:
if seg in segments:
region_segments.append(seg)
print("Region", i+1, "is bounded by segments:", region_segments)
产生:
Region 1 is bounded by segments: [[5, 6], [6, 7], [4, 5]]
Region 2 is bounded by segments: [[6, 12], [12, 13], [7, 13], [6, 7]]
Region 3 is bounded by segments: [[9, 10], [10, 11], [8, 9]]
Region 4 is bounded by segments: [[5, 14], [5, 6], [6, 15], [14, 15]]
区域 1 和 3 不正确