Desidero calcolare il volume di un oggetto mesh 3D con triangoli di superficie composti.Come calcolare il volume di un oggetto mesh 3D la cui superficie è costituita da triangoli
risposta
GNU Triangulated Surface Librarycan do this for you. Tieni presente che la superficie deve essere chiusa. Questo non sarà il caso per molti modelli 3D.
Se si desidera implementare da soli, è possibile iniziare dando un'occhiata al loro codice.
Se si reimplementa questo, si prega di fare attenzione: la libreria GTS è LGPL, quindi qualsiasi lavoro derivato deve essere LGPL o GPL. – Cascabel
Se ho capito bene, stai dicendo che hai già una mesh superficiale di triangoli e vorresti generare una solida mesh 3D da esso.
I triangoli significano che dovrete utilizzare elementi tetraedrici per l'interno 3D. Dovrai cercare un octree auto meshing algorithm che possa utilizzare una mesh di superficie come seme.
Questo è un problema comune nella letteratura di meshing automatico degli elementi finiti. Guarderei lì.
Reading this paper, in realtà è un calcolo piuttosto semplice.
Il trucco è di calcolare il volume firmato di un tetraedro - basato sul triangolo e completato all'origine. Il segno del volume proviene dal fatto che il triangolo stia puntando nella direzione dell'origine. (Il normale del triangolo è essa stessa dipende l'ordine dei vertici, che è il motivo per cui non si vede esplicitamente riferimento di seguito.)
tutto questo si riduce al seguente semplice funzione:
public float SignedVolumeOfTriangle(Vector p1, Vector p2, Vector p3) {
var v321 = p3.X*p2.Y*p1.Z;
var v231 = p2.X*p3.Y*p1.Z;
var v312 = p3.X*p1.Y*p2.Z;
var v132 = p1.X*p3.Y*p2.Z;
var v213 = p2.X*p1.Y*p3.Z;
var v123 = p1.X*p2.Y*p3.Z;
return (1.0f/6.0f)*(-v321 + v231 + v312 - v132 - v213 + v123);
}
e poi un driver per calcolare il volume della maglia:
public float VolumeOfMesh(Mesh mesh) {
var vols = from t in mesh.Triangles
select SignedVolumeOfTriangle(t.P1, t.P2, t.P3);
return Math.Abs(vols.Sum());
}
Piuttosto una soluzione elegante. – levis501
Mi chiedo perché questo non è stato scoperto prima del 2001. O lo era, ma non aveva rilevanza? –
Ottobre 1984, è stato pubblicato il documento "Un metodo simbolico per calcolare le proprietà integrali di poliedri arbitrari non convessi" e descrive questo metodo per calcolare il volume. È anche un metodo più o meno banale, quindi è necessario molto più di una semplice informazione per pubblicare un articolo. –
Yip Frank Kruegers risposta funziona bene +1 per questo. Se disponi di funzioni vettoriali disponibili, puoi utilizzare anche questo:
public static float SignedVolumeOfTriangle(Vector p1, Vector p2, Vector p3)
{
return p1.Dot(p2.Cross(p3))/6.0f;
}
modifica .. aggiunto impl. per Dot() e Cross() se non si è sicuri. La maggior parte delle librerie di matematica avrà queste. Se si utilizza WPF, vengono implementati come metodi statici della classe Vector3D.
public class Vector
{
...
public float Dot(Vector a)
{
return this.X * a.X + this.Y * a.Y + this.Z * a.Z;
}
public Vector Cross(Vector a)
{
return new Vector(
this.Y * a.Z - this.Z * a.Y,
this.Z * a.X - this.X * a.Z,
this.X * a.Y - this.Y * a.X
);
}
...
}
forse postcode per Dot() AND Cross()? (sia banale da implementare, ma per completezza). BTW, @Frank La risposta di Kruegers è ciò che ottieni se si semplifica p1.Dot (p2.Cross (p3))/6.0f –
Il metodo di cui sopra è corretto degli oggetti "semplici" (senza intersezione/triangoli sovrapposti) come sfere tetrahedras e così via. Per forme più complesse, una buona idea potrebbe essere quella di segmentare la mesh (chiuderla) e calcolare separatamente il volume di ogni segmento. Spero che questo aiuti.
se il volume è firmato non è necessario il centro all'interno – makc
Risposta errata. Il metodo descritto è corretto per oggetti chiusi arbitrariamente complessi senza triangoli intersecanti/sovrapposti e non vi è alcun requisito sulla posizione del punto centrale. Questo perché i "volumi" del tetraedro sono firmati e aggiunti algebricamente. – galinette
@galinette Sì, hai ragione. Per oggetti "semplici" intendevo oggetti senza triangoli intersecanti/sovrapposti. Anche il centro della rete può essere all'esterno. – imoutidi
- 1. Creazione di mesh quadrilatera dalla mesh di superficie Mathematica
- 2. Intersezione di una mesh con una superficie parametrica
- 3. 3D trama di superficie da matrice 2D
- 4. Come si converte una mesh 2D di triangoli in quadrilateri?
- 5. Come posso calcolare il volume di una superficie adatta in MATLAB?
- 6. Un metodo per calcolare il centro di massa da un file .stl (stereo litografia)?
- 7. Come trovare se un oggetto 3D si adatta a un altro oggetto 3D (il contenitore)?
- 8. Alternativa al grafico della superficie di una superficie ComponentOne 3D
- 9. Intersezioni mesh a mesh
- 10. scomporre un mesh 3D in un 2d rete
- 11. Julia PyPlot: traccia la superficie 3D con come faccia la norma del gradiente di superficie
- 12. R: Tracciare una superficie 3D da x, y, z
- 13. In Python, come faccio a voxelize una mesh 3D
- 14. simple R interpolazione 3d/trama di superficie
- 15. matplotlib - superficie 3D da una matrice rettangolare di altezze
- 16. Come animare un modello 3d (mesh) in OpenGL?
- 17. Perché i triangoli vengono ritagliati in questa mesh?
- 18. Genera poligono 2D a sezione incrociata dalla mesh 3D
- 19. Come creare un grafico 3d/superficie con JavaFX?
- 20. Interpola superficie del cilindro 3D in Matlab
- 21. Libreria per la generazione di mesh in .Net?
- 22. Come rilevare i vertici del bordo di un modello 3D a maglie aperte?
- 23. Superficie e contorno 3d in matplotlib
- 24. Orientamento tetraedro per mesh triangolari
- 25. In Ruby, perché Array.new (dimensione, oggetto) crea una matrice costituita da più riferimenti allo stesso oggetto?
- 26. Come posso verificare se un punto si trova all'interno di una forma 3d con la sua superficie definita da una nuvola di punti?
- 27. Three.js - Come posso calcolare la distanza tra due posizioni 3D?
- 28. Mesh Grid Simplification
- 29. Tracciando un grafico superficie 3D con la mappa profilo di sovrapposizione, utilizzando R
- 30. Generazione di mesh da punti con coordinate x, yez
Non ho il tempo di darvi ulteriori informazioni, forse qualcun altro cam, ma date un'occhiata: http://amp.ece.cmu.edu/Publication/Cha/icip01_Cha.pdf – nlucaroni
Appare ridondante con domanda 1410525 – DarenW