2017-08-11 3 views
-1

im en utilisant la bibliothèque Mesh dans le traitement pour créer une grille de triangles basée sur un tableau de points. Mon problème est que cette bibliothèque ne peut retourner qu'un tableau de lignes qui composent les triangles et non les triangles eux-mêmes. est-ce que quelqu'un sait comment obtenir tous les triangles?trouver tous les triangles à partir d'un tableau de lignes (diagramme de Delaunay)

la bibliothèque est ici: http://leebyron.com/mesh/

and here's a picture for refrence

+0

Avez-vous essayé de faire des recherches sur Google pour "convertir un ensemble de lignes en triangles" pour trouver des algorithmes qui pourraient vous aider? Qu'est-il arrivé quand vous les avez essayé? –

+0

Je ne trouve rien qui ne prenne pas pour toujours ... –

+0

Je voudrais peut-être une bibliothèque différente –

Répondre

0

Bonne question. D'abord, la solution est de prendre la bibliothèque qui peut vous donner le résultat dans le format désiré. Vous avez besoin de triangulation de Delaunay pas de diagramme de Delaunay, ce que cette bibliothèque fournit.

Il est possible d'obtenir des triangles à partir de la bibliothèque de résultats fournir assez simple. Si le point du diagramme interne a n bords (méthode getLinked()), il fait partie des triangles n. Les autres arêtes des triangles sont calculées par en triant les arêtes par angle. Si le point est extérieur (sur la coque convexe) que l'angle entre une paire d'arêtes est plus grand que 180deg et sur cette paire, le triangle n'existe pas.

algorithme est comme:

for each point p1: 
    neighbours = delaunay.getLinked(p1) 
    sort neighbours by angle to point p1 
    for i=0 to size(neighbours) 
    p2 = neighbours[i] 
    p3 = neighbours[(i+1) % size(neighbours)] 
    if (angle(p3, p1) - angle(p2, p1)) % 360deg > 180deg: 
     continue # Outer triangle 
    if p2 > p1 and p3 > p1: 
     continue # Already processed 
    print result triangle (p1, p2, p3) 

Check (p2, p3> p1) est de supprimer trinagles identiques, puisque chaque triangle est produit trois fois.