## `triangle_triangle_adjacency(F)`

Given a manifold triangle mesh with face indices F, computes adjacency info between triangles

The ordering convention for halfedges is the following: [halfedge opposite vertex 0, halfedge opposite vertex 1, halfedge opposite vertex 2]

Parameters:

Name Type Description Default
`F` `(m,3) numpy int array`

face index list of a triangle mesh

required

Returns:

Name Type Description
`TT` `(m,3) numpy int array`

Index list specifying which face j is adjacent to which face i across the respective halfedge in position (i,j). If there is no adjacent face (boundary halfedge), the entry is -1.

`TTi` `(m,3) numpy int array`

Index list specifying which halfedge of face j (0,1,2) is adjacent to i in position (i,j).

Examples:

``````from gpytoolbox import regular_square_mesh, triangle_triangle_adjacency
v, f = regular_square_mesh(10)
Source code in `src/gpytoolbox/triangle_triangle_adjacency.py`
 ``` 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51``` ``````def triangle_triangle_adjacency(F): """Given a manifold triangle mesh with face indices F, computes adjacency info between triangles The ordering convention for halfedges is the following: [halfedge opposite vertex 0, halfedge opposite vertex 1, halfedge opposite vertex 2] Parameters ---------- F : (m,3) numpy int array face index list of a triangle mesh Returns ------- TT : (m,3) numpy int array Index list specifying which face j is adjacent to which face i across the respective halfedge in position (i,j). If there is no adjacent face (boundary halfedge), the entry is -1. TTi : (m,3) numpy int array Index list specifying which halfedge of face j (0,1,2) is adjacent to i in position (i,j). Examples -------- ```python from gpytoolbox import regular_square_mesh, triangle_triangle_adjacency v, f = regular_square_mesh(10) TT, TTi = triangle_triangle_adjacency(f) ``` """ m = F.shape assert m > 0 assert F.shape == 3 he = halfedges(F) he_flat = np.concatenate((he[:,0,:], he[:,1,:], he[:,2,:]), axis=0) he_flip_flat = np.flip(he_flat, axis=-1) map_to_flip = array_correspondence(he_flat,he_flip_flat,axis=0) TT = np.reshape(np.where(map_to_flip<0, -1, map_to_flip % m), F.shape, order='F') TTi = np.reshape(np.where(map_to_flip<0, -1, map_to_flip // m), F.shape, order='F') return TT, TTi ``````