es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Triangulación en Matplotlib: más triángulos que vértices.

Quiero crear una cuadrícula triangular no estructurada y tengo dos archivos: uno para los vértices y otro para los triángulos. El problema es que el método de triangulación de Matplotlib requiere que la longitud del arreglo de vértices y la longitud del arreglo de triángulos sean iguales, pero mis datos tienen más triángulos que vértices. Por lo tanto, en lugar de obtener una cuadrícula completa, solo puedo obtener una parte de ella (omitendo la parte final del arreglo de triángulos).

Mi salida:

Cuadrícula que quiero completar

Salida esperada:

Salida esperada

Arreglo de vértices:

[[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]]

Arreglo de triángulos:

[(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)]

Código que escribí:

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()

¿Existe alguna manera de solucionar esto, o existe otra biblioteca con métodos que permitan obtener lo que quiero?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con tu código es que solo estás pasando los primeros 25 triángulos a Triangulation, mientras que en realidad hay 34 triángulos en los datos. Esto hace que se omitan los últimos 9 triángulos, lo que resulta en una rejilla incompleta.

    Para solucionar esto, simplemente puedes pasar todos los triángulos a Triangulation en lugar de solo los primeros 25. Aquí tienes el código actualizado:

    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)
    plt.figure()
    plt.gca().set_aspect('equal')
    plt.triplot(triang, 'go-')
    plt.show()
    

    Esto debería darte la rejilla completa que estás esperando. En cuanto a otras bibliotecas que podrían proporcionar funcionalidad similar, podrías considerar el uso de scipy.spatial.Delaunay o pyvista.PolyData, ambas soportan rejillas triangulares no estructuradas.

Comments are closed.