Ho 2 triangoli e vertici p0, p1, p2, p3. Questi due triangoli condividono un vantaggio. Da questi due triangoli voglio fare un tetraedro dato dai 4 vertici. La libreria con cui lavoro richiede che "i 4 vertici debbano essere dati in modo tale che i quattro vertici dei vertici che definiscono le facce del tetraedro nel disegno appaiano in senso antiorario quando vengono visualizzati dall'esterno" . Supponendo che uno dei due triangoli sia p0, p1, p2, io calcolo il normale come (p1-p0) (croce) (p2-p0). Qualcuno può dirmi un modo per assicurarmi che questa condizione sia soddisfatta?Orientamento tetraedro per mesh triangolari
risposta
Risposta breve:
La condizione è che p3
deve essere sul lato corretto del piano determinato da (p0, p1, p2)
.
Così, dopo il calcolo del normale per questo piano, è necessario determinare se il vettore da (diciamo) p0
a p3
sia rivolta nella stessa direzione del normale, o nella direzione opposta, prendendo il prodotto scalare dot(normal, p3-p0)
.
Ulteriori matematicamente parlando:
è necessario trovare il determinante della matrice 4x4 formata dalle coordinate omogenee dei quattro punti. Il segno del determinante determina se la condizione è soddisfatta; il segno appropriata dipende dalle precise convenzioni utilizzate, ma idealmente dovrebbe essere positiva:
require:
0 < det(p0, p1, p2, p3)
== det [ p0.x p0.y p0.z 1 ]
[ p1.x p1.y p1.z 1 ]
[ p2.x p2.y p2.z 1 ]
[ p3.x p3.y p3.z 1 ]
Se un particolare insieme ordinato di punti ha un determinante negativo, è possibile risolvere il problema scambiando due qualsiasi dei punti (che sarà negare il determinante):
e.g., swapping p0 and p2:
det(p0, p1, p2, p3) = - det(p2, p1, p0, p3)
^ ^ ^ ^
o, più in generale, il passaggio tra even and odd permutations dei quattro vertici.
Se il determinante è zero, i quattro punti sono complanari e non possono essere corretti in questo modo.
Infine, il codice:
Un modo relativamente semplice per calcolare questo determinante con 3-d matematica vettoriale:
let: v1 = p1 - p0
v2 = p2 - p0
v3 = p3 - p0
norm12 = cross(v1, v2)
-> determinant = dot(norm12, v3)
Il determinante finale è anche conosciuto come "prodotto misto" di v1, v2 e v3.
Nota che ho esitato a provare a decodificare la convenzione del segno esatto (vale a dire, se hai bisogno che il determinante sia positivo o negativo) dalla tua domanda: il testo e il diagramma che fornisci è più che un po 'confuso.
Dato che si dispone della libreria originale e della relativa documentazione, tuttavia, si è nella posizione migliore per rispondere a questa domanda. Come ultima risorsa, puoi provare il metodo empirico: prova entrambi i segnali e scegli quello che non esplode ...
Grazie mille per la risposta chiarificatrice. Ha funzionato come un fascino – Ray
- 1. Intersezioni mesh a mesh
- 2. ombre div css triangolari
- 3. Marching Cube ambiguità Versus Marching Tetraedro
- 4. Notazione Big O per numeri triangolari?
- 5. computazionale geometria, tetraedro firmato il volume
- 6. Orientamento orizzontale per UITabBarController?
- 7. Generazione di coordinate triangolari/esagonali (xyz)
- 8. Creazione di mesh quadrilatera dalla mesh di superficie Mathematica
- 9. come allineare due mesh
- 10. Converti poligoni in mesh
- 11. Ridimensionamento mesh Three.js
- 12. Mesh Grid Simplification
- 13. Rete mesh Bluetooth?
- 14. Post-elaborazione su mesh selezionate
- 15. Visualizza mesh in OpenGL (lwjgl)
- 16. Applicazione universale con orientamento verticale per iPhone e orientamento orizzontale per iPad
- 17. Orientamento WPF
- 18. Trova tutti i punti con coordinate intere all'interno del tetraedro
- 19. Listing tutte le sezioni interessanti di un tetraedro
- 20. La complessità della moltiplicazione di due matrici triangolari inferiori
- 21. Avvio dell'applicazione in orientamento orizzontale per IPad
- 22. Android: Orientamento schermo/Rotazione per anteprima fotocamera
- 23. kinect v2 orientamento comune per Unity3d quaternione
- 24. Forzare UIActionSheet per utilizzare un orientamento specifico
- 25. come copiare solo i valori triangolari superiori nell'array da numpy.triu()?
- 26. Caricatore di file mesh OBJ leggero per C/C++?
- 27. Generazione di mesh per scienza computazionale in Python
- 28. Libreria per la generazione di mesh in .Net?
- 29. Implementazione rete mesh wireless Ad-Hoc per Windows 7
- 30. Come si usa cv :: rimappa con mesh in avanti, non in reverse mesh, per deformare le immagini?
È un peccato che tu abbia fatto tutto il possibile per fornire un diagramma molto chiaro e poi usato le etichette sbagliate per i vertici nel testo della tua domanda. La prima volta che l'ho letto ero molto confuso. –
Avresti bisogno di un altro modo per decidere all'esterno - spesso questo deriva dall'algoritmo di meshing (cubi marching ecc.) –
Se entrambi i triangoli hanno le normali calcolate nello stesso modo come menzionato nella descrizione, non potrei semplicemente scegliere un lato (quello che sta puntando il normale) e lo consideri davanti o dietro? – Ray