PDA

Voir la version complète : Aire et volume



César Vonc
19/03/2013, 15h05
Mise à jour : (10/14)

- Prise en charge de multiples objets simultanément
- Mise à jour du calcul auto
- Traduction tchèque par Lubo Bezek.


Mise à jour :

Calcule l'aire et le volume :
- d'un objet fermé,
- d'un objet ouvert,
- d'une sélection de polygones,
- d'un tracé.

http://code.vonc.fr/details/40/image_01.png (http://code.vonc.fr/details/40/image_01a.png)

http://code.vonc.fr/details/40/image_02.png

Télécharger (http://code.vonc.fr/?a=40)



--


Voici un petit script qui calcule l'aire et le volume d'un objet ou d'une sélection de polygones.


J'ai utilisé une formule récurrente sur plusieurs sites de géométrie pour le calcul du volume, je m'étonne qu'elle soit si simple mais apparemment semble fonctionner : http://fr.softuses.com/186994

Mais dans le doute, je publie ce script en tant que version bêta, le volume des primitives est bon (bien qu'il dépende du nombre de subdivisions), mais si vous avez des objets complexes dont vous connaissez le volume, ça m'intéresse grandement de savoir si le script donne bel et bien la bonne valeur.


En cas de volumes non fermés ou de sélection de polygones, j'en ai chié mais à priori le script bouche tous les trous de son côté pour pouvoir calculer le volume de la forme. Lorsque le volume n'est pas possible, il retourne zéro.

lenogre
19/03/2013, 15h13
Majoul a fait un plug permettant de calculer le volume et la surface : VSM4D

César Vonc
19/03/2013, 15h16
J'en ai entendu parler, oui, mais tous les liens que je trouve sont morts.

Wonders
19/03/2013, 15h26
Tu fais quoi, tu coupes des tranches parallèles tous les X cms ?
Je serais curieux de connaitre le principe d'un calcul de volume arbitraire...

valkaari
19/03/2013, 15h26
def volumeTetraedre(p1, p2, p3) :
v321 = p3.x * p2.y * p1.z
v231 = p2.x * p3.y * p1.z
v312 = p3.x * p1.y * p2.z
v132 = p1.x * p3.y * p2.z
v213 = p2.x * p1.y * p3.z
v123 = p1.x * p2.y * p3.z
return (-v321 + v231 + v312 - v132 - v213 + v123) / 6.0
Tu peux le remplacer à priori par. En tout cas ça semble donner le même résultat.




def volumeTetraedre(p1,p2,p3):
return p1.Dot(p2.Cross(p3))/6.0sinon y a kuroyumes machin qui en a fait un mais je crois qu'il ne fonctionne pas avec des objets ouverts.
http://www.kuroyumes-developmentzone.com/cinema-4d/free-plugins/


edit :

même chose pour l'aire du triangles, tu fais un cross product, ça te donne l'aire du parralllléllalieisllsapièmachin là et tu divise par deux.

César Vonc
19/03/2013, 16h21
Merci Val, j'essaie tout ça, j'ai pas vraiment optimisé le code pour le moment.

Le principe est assez simple, Wonders, on calcule le volume signé du tétraèdre entre chaque polygone et un point donné (le centre de l'objet), le volume est positif ou négatif selon la normale du poly, donc la somme de tous ces volumes donne le volume final !

Globalement, le principe ressemble à ça :

7352

Pour calculer le volume gris, on calcule le tétraèdre rouge plus le bleu, le rouge étant un volume négatif et le bleu un positif, à cause du sens des normales des faces, la somme donne bien le gris.

On applique ça à tous les côtés et la magie opère ! ^^

Sir Gong
19/03/2013, 16h24
Mais ouais, c'est évident, il est nul ce Wonders quand il s'y met :icon_mrgreen:

Wonders
19/03/2013, 16h29
Ah oui, d'accord, je pense avoir compris (toi aussi Gongo ?) :icon_mrgreen:
Merci pour l'explication !
Par contre ça marche toujours dans le cadre de volumes complexes, concaves, ou avec un centre en dehors de l'objet (edit : ah oui, c'est le principe même du tétraèdre signé...) ?

Instinctivement, j'aurais calculé l'aire de tranches du volume, avec interpolation en fonction de la distance entre chaque tranche (plus de tranches = plus précis mais plus lent).

César Vonc
19/03/2013, 16h44
Ça fonctionne en théorie avec tous les volumes, oui, chaque tétraèdre correspondant à un polygone, enfin, un triangle, de l'objet.


Instinctivement, j'aurais calculé l'aire de tranches du volume, avec interpolation en fonction de la distance entre chaque tranche (plus de tranches = plus précis mais plus lent).Oui au début j'avais également pensé à quelque chose dans ce genre là, en utilisant un rayon qui balaierait l'objet en mesurant la distance entre chaque intersection, mais c'était très vite devenu une usine à gaz pas très productive. : P


D'ici demain je devrais poster le script tout propre.

PP
19/03/2013, 17h27
Juste pour dire que VSM4D est vraiment bien, c'est dommage que Majoul ait cessé son développement. Il restait qqs détails ergonomiques à peaufiner.
Une fonction fort pratique et qui manquait est celle de la mise à l'échelle automatique d'un objet (selon l'axe voulu ou les 3) pour atteindre un volume ou une surface désirée : ça évite de procéder à tâtons ou de se taper des règles de trois, ça permet de dessiner rapidement un flacon d'un litre et demi, par exemple quand on travaille au packaging chez Ricard.

Même payant, un bon plug volumes et surfaces avec une interface limpide (c'est-à-dire accessible même à de simples graphistes par exemple...:P), ferait un carton.

tabou
19/03/2013, 17h33
Pour vérifier la précision de ton script je te conseille NetFabb Studio Basic (http://www.netfabb.com/basic.php), il est gratuit, il sait, entre autres, calculer les aires et les volumes et reconnait plusieurs formats 3D dont le STL et l'obj.

César Vonc
20/03/2013, 18h18
Ah oui, pas bête le coup de la mise à l'échelle automatique, je verrai comment l'intégrer plus tard.

Tabou, je ne trouve pas de version gratuite sur Net Fabb.


Version 1.0 disponible !

http://code.vonc.fr/?a=40

Édit : micro-correction effectuée à 19h.

tabou
21/03/2013, 12h01
Voici le lien : http://www.netfabb.com/download.php
Ce n'est pas obligatoire de remplir le formulaire pour télécharger, tu peux aller directement au bouton download qui est tout en bas de la page.

rik25
21/03/2013, 14h30
Merci César !!:thumbup1:

César Vonc
13/10/2014, 22h01
Mise à jour du module, avec une interface plus pratique, mise à jour auto et la prise en charge de multiple objets !

http://code.vonc.fr/details/40/image_01.png (http://code.vonc.fr/details/40/image_01a.png)

http://code.vonc.fr/details/40/image_02.png

Télécharger (http://code.vonc.fr/?a=40)

Toujours gratuit !

yayaprod
13/10/2014, 22h10
Merci beaucoup Grand maître, ça tombe à point nommé pour ma part.
Yaya .°)

valkaari
14/10/2014, 00h26
Tu pourrais peut être rajouter une option pour utiliser le nouveau tag "annotation" et y mettre le volume/aire

Aucune idée si ça peut servir mais c'est pas grand chose à rajouter et ça fait classe ^^

César Vonc
14/10/2014, 22h22
Ah oui pourquoi pas, Val, je verrai ça en détail quand j'aurai la R16. ^^