2016-02-15 1 views
2

Mon but est de vérifier la direction normale des triangles dans les fichiers STL sont compatibles ??Comment vérifier trois sommets de triangle sont dans l'ordre cyclique ou l'ordre anticyclique?

par ex. Fichier STL est comme ci-dessous, je veux vérifier toutes les facettes sont dans la même direction, c'est-à-dire vers l'extérieur.

facette normale 0 0 -1

outer loop 
    vertex -20.5411 -4.36615 0 
    vertex -16.9894 -12.3435 0 
    vertex -19.1845 -8.54147 0 
endloop 

endfacet

facette normale -0,994522 0,104528 0

outer loop 
    vertex -21 0 0 
    vertex -21 0 2 
    vertex -20.5411 4.36615 0 
endloop 

endfacet

Je pensais calculer normal par produit croisé de sommets mais comment je connaîtrais la direction ?? J'ai lu "Les produits croisés des vecteurs unitaires cycliques sont positifs." mais comment dois-je utiliser cette règle dans mon problème ??

Quelqu'un peut m'aider s'il vous plaît ?? Je suis vraiment coincé ici :(

Répondre

1

Vérifiez le signe du produit scalaire de la normale et le produit croisé de 2 directions de bord, par exemple, étant donné normale N et des points A, B, C:

((B - A) x (C - A)) * N 

La croix produit devrait produire vecteur avec le même sens que la normale et que le produit scalaire de 2 vecteurs ST et est

S * T = |S| * |T| * cos(theta) 

theta est l'angle entre les vecteurs, cela devrait être positif si et seulement si la direction est correcte. (En supposant ici qu'il n'y a pas 2 points du triangle sont au même endroit)

Java exemple de code (en utilisant javafx.geometry.Point3D):

boolean check(Point3D normal, Point3D p1, Point3D p2, Point3D p3) { 
    return p2.subtract(p1) 
      .crossProduct(p3.subtract(p1)) 
      .dotProduct(normal) > 0; 
} 
+0

Merci Fabian, Mais je ne comprends pas comment cela va m'aider à vérifier que tous les triangles de fichiers stl sont dans la même direction (face vers l'extérieur, selon la règle de la main droite si les sommets sont dans le sens inverse des aiguilles d'une montre) ?? Encore une chose, dans quelques fichiers STL, il n'y a pas de normale donnée par défaut, donc je vais calculer en utilisant un produit croisé puis en le normalisant. – nick

+0

Étant donné la fonction par vous comparez deux triangles ... mais comment saurais-je quel triangle est dans la bonne direction dans un ensemble donné de triangles (ie quel triangle est orienté vers l'extérieur ??) Alors qu'avec je prendrai cette normale comme référence triangle et vérifier avec tous les restants traingle. S'il vous plaît laissez-moi savoir ... Je suis tellement confus toute la journée – nick

0

Trouver le triangle avec plus coordonnée Z, vérifiez si la normale est presque vers l'extérieur (Direction Z +) ou presque vers l'intérieur (direction Z). Une fois que vous le savez, déplacez-vous vers des triangles adjacents non visités, en vérifiant si les normales se renversent et en les marquant comme visitées.

Une fois que vous avez visité tous les triangles, arrêtez.

+0

ce qui signifie par presque vers l'extérieur ou vers l'intérieur ?? Pouvez-vous me donner s'il vous plaît dites-moi comment savoir triangle donné est orienté vers l'extérieur ou vers l'intérieur ?? – nick

+0

Vous devez vérifier si l'angle entre la direction Z mondiale et la normale du triangle le plus élevé est proche de zéro. – abenci