I want to create an unstructured triangular grid, and I have two files: for vertices and triangles. The problem is that Matplotlib Triangulation method requires the length of array of vertices and the length of array of triangles being same, but my data has more triangles than vertices. So, instead of full grid I can get only part of it (skipping the tail of triangles array).
My output:
Expected output:
Vertices array:
[[0. 0. ]
[0. 1. ]
[1. 0. ]
[1. 1. ]
[0. 0.33333333]
[0. 0.66666667]
[0.33333333 0. ]
[0.66666667 0. ]
[0.33333333 1. ]
[0.66666667 1. ]
[1. 0.33333333]
[1. 0.66666667]
[0.48987551 0.53023763]
[0.43898046 0.76879765]
[0.70260457 0.70541771]
[0.23823447 0.57580349]
[0.30488903 0.35751012]
[0.7335183 0.42800646]
[0.52102626 0.34589035]
[0.80431355 0.19597677]
[0.19985633 0.8004077 ]
[0.44618858 0.18491763]
[0.84231781 0.84302109]
[0.21688219 0.17515222]
[0.63434267 0.23095824]]
Triangles array:
[(4, 0, 23), (0, 6, 23), (6, 21, 23), (6, 7, 21), (21, 16, 23), (18, 16, 21), (12, 16, 18), (12, 15, 16), (15, 4, 16), (16, 4, 23), (5, 4, 15), (5, 15, 20), (1, 5, 20), (8, 1, 20), (13, 8, 20), (9, 8, 13), (15, 13, 20), (12, 13, 15), (14, 12, 17), (13, 12, 14), (9, 13, 14), (9, 14, 22), (3, 9, 22), (11, 3, 22), (14, 11, 22), (11, 14, 17), (10, 11, 17), (10, 17, 19), (17, 12, 18), (18, 21, 24), (17, 18, 24), (19, 17, 24), (7, 19, 24), (21, 7, 24), (7, 2, 19), (2, 10, 19)]
Code I wrote:
nodes = np.asarray(convert(read_file("d2.txt"), float))
x, y = np.degrees(nodes[:, 0]), np.degrees(nodes[:, 1])
v_numbers = np.asarray(convert(read_file("d1.txt"), int))
triang = Triangulation(x, y, v_numbers[0:25])
plt.figure()
plt.gca().set_aspect('equal')
plt.triplot(triang, 'go-')
plt.show()
Is there any way to deal with this, or other library exists with methods allowing to get what I want?
CodePudding user response:
You don't have to provide the indices of the triangles: by default, matplotlib can automatically generate them using a Delaunay triangulation (see the 


