Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1040 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  algo calcul de volume objet 3d

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

algo calcul de volume objet 3d

n°2146147
aure31
Posté le 17-06-2012 à 21:58:37  profilanswer
 

Bonjour,
 
Je dois pouvoir calculer le volume d'un objet 3D. J'utilise l'algo décrit ici:http://www.gamedev.net/page/resour [...] ions-r2247 que j'ai retranscrit en VB:
 

Citation :

Function volume(ByRef source As T_Objet)
    Dim i As Integer
    Dim vol As Double
    Dim v1 As T_Coord
    Dim v2 As T_Coord
    Dim v3 As T_Coord
     
    vol = 0
     
    For i = 0 To source.NmbFaces
        v1.X = source.Face(i).Point(0).Coord.X
        v1.Y = source.Face(i).Point(0).Coord.Y
        v1.Z = source.Face(i).Point(0).Coord.Z
        v2.X = source.Face(i).Point(1).Coord.X
        v2.Y = source.Face(i).Point(1).Coord.Y
        v2.Z = source.Face(i).Point(1).Coord.Z
        v3.X = source.Face(i).Point(2).Coord.X
        v3.Y = source.Face(i).Point(2).Coord.Y
        v3.Z = source.Face(i).Point(2).Coord.Z
         
        vol = vol + ((v2.Y - v1.Y) * (v3.Z - v1.X) - (v2.Z * v1.X) * (v3.Y - v1.Y)) * (v1.X + v2.X + v3.X)
    Next
    volume = vol / 6#
     
End Function


 
J'ai testé avec un cube de 2 dans un fichier .obj dont les coordonnées (stockées 3 par 3) sont:
 

Citation :

v -1 -1 -1
v 1 -1 -1
v -1 1 -1
v 1 1 -1
v 1 -1 -1
v -1 1 -1
v 1 1 -1
v -1 1 -1
v 1 1 1
v -1 1 1
v -1 1 -1
v 1 1 1
v -1 1 1
v -1 1 -1
v -1 -1 1
v -1 -1 -1
v -1 1 -1
v -1 -1 1
v -1 -1 -1
v 1 -1 1
v -1 -1 1
v -1 -1 -1
v 1 -1 1
v 1 -1 -1
v 1 1 1
v 1 -1 1
v 1 -1 -1
v 1 1 1
v 1 1 -1
v 1 -1 -1
v 1 1 1
v 1 -1 1
v -1 -1 1
v 1 1 1
v -1 1 1
v -1 -1 1


 
Cependant le volume qui est renvoyé est 0. Et en changeant les coordonnées du cube (avec les mêmes dimensions) j'obtiens un volume encore différent.
Savez-vous ce qui ne marche pas chez moi?

mood
Publicité
Posté le 17-06-2012 à 21:58:37  profilanswer
 

n°2146190
rufo
Pas me confondre avec Lycos!
Posté le 18-06-2012 à 10:40:32  profilanswer
 

L'algo dans l'article ne fait jamais incrémenter i. Ton i correspond au j dans l'algo. Ton pb vient très probablement de la structure de stockage des coordonnées qui est différente.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2146267
bjone
Insert booze to continue
Posté le 18-06-2012 à 16:39:13  profilanswer
 

problème de clockwise/counterclockwise ?
Quand tu translates les coordonnées, c'est bien uniforme sur tous les vertices ? (tu ne changes pas l'ordre par triangle ?)

n°2146572
aure31
Posté le 20-06-2012 à 13:09:42  profilanswer
 

Merci pour vos réponses.
 
Effectivement je viens de relire plus en détail la description de l'algo, et il semble que les points doivent être ordonnés d'une certaine manière... Cependant je ne vois pas comment traiter des points de façon horaire ou anti-horaire dans l'espace?

n°2146617
bjone
Insert booze to continue
Posté le 21-06-2012 à 00:04:42  profilanswer
 

La grosse question est de savoir si lors de tes tests de translation, tu changes l'ordre ou pas.
Si tu changes l'ordre tu pourri l'algorithme qui se base sur l'orientation des triangles pour sommer ou soustraire le volume de la pyramide (triangle => point constant/origine).
 
La plupart des algorithmes en 3D ont besoin d'une orientation (normale) cohérente, il faut que tu travailles ça ;)

n°2146723
aure31
Posté le 22-06-2012 à 09:47:23  profilanswer
 

Lors de la translation, je calcule juste le barycentre (en faisant une moyenne sur chaque coordonnée), et je soustrais le barycentre sur chaque point, comme ça le barycentre se retrouve théoriquement aux coordonnées (0, 0, 0). Mais en aucun cas je ne change l'ordre des triangles.
 
Mon problème doit effectivement venir de l'orientation des points qui semble être indispensable pour cet algorithme, mais je ne sais pas trop m'y prendre en l’occurrence pour les orienter et les organiser correctement.

n°2146804
bjone
Insert booze to continue
Posté le 22-06-2012 à 14:03:28  profilanswer
 

Alors c'est plus bizarre, si tu ne fais qu'une translation sans changer l'ordre ça devrait pas bouger :/

n°2147084
aure31
Posté le 25-06-2012 à 21:39:51  profilanswer
 

Oui, j'ai peut-être mal reproduit l'algo... J'ai voulu essayer d'autres algorithmes, mais il semble qu'ils aient tous besoin de cette orientation, et je ne sais pas trop comment m'y prendre pour ça...  
Il y aurait pas une solution plus simple?

n°2147123
bjone
Insert booze to continue
Posté le 26-06-2012 à 09:59:08  profilanswer
 

Non, mais si ton orientation est bonne à l'origine elle doit pas changer lors d'une translation/rotation.

n°2147135
aure31
Posté le 26-06-2012 à 10:40:53  profilanswer
 

Oui, c'est sûr que ce n'est pas normal, il doit y avoir un problème algorithmique même si je ne vois pas où... :-/

mood
Publicité
Posté le 26-06-2012 à 10:40:53  profilanswer
 

n°2147139
bjone
Insert booze to continue
Posté le 26-06-2012 à 10:51:51  profilanswer
 

tu t'est planté(e) en copiant/collant l'équation de calcul de volume ;)
(forcément le truc que j'ai pas regardé plus que ça en pensant que ça pouvait pas être possible  :lol: )


Message édité par bjone le 26-06-2012 à 10:52:08
n°2147153
aure31
Posté le 26-06-2012 à 11:29:07  profilanswer
 

Oulah!! Oui effectivement, je ne sais pas comment j'ai pu faire une recopie aussi mauvaise, mea culpa... :-/
Bon, je trouve la même chose maintenant après et avant translation... a savoir 0.
J'ai fais une exécution pas à pas et en faite à un moment on ajoute 24 au volume, et j'enlève 24 par la suite, ce qui donne 0. Par contre si on ajoutait deux fois 24, j'arriverais à un volume final = 48/6 = 8. Donc le volume exact de mon cube de côté 2. :-)
On se rapproche... donc c'est ici que doit intervenir le problème d'orientation je pense, non?

n°2147215
bjone
Insert booze to continue
Posté le 26-06-2012 à 17:57:10  profilanswer
 

Il y a des chances ;)

n°2147309
aure31
Posté le 27-06-2012 à 13:27:46  profilanswer
 

J'ai finalement trouvé une autre solution, qui fait que je n'ai plus à réfléchir à un quelconque sens horaire ou anti-horaire... Pour une fois mon algo a marché du premier coup... :p
Merci tout de même pour votre aide! :-)

n°2147310
rufo
Pas me confondre avec Lycos!
Posté le 27-06-2012 à 13:29:08  profilanswer
 

Tu devrais le poster ici, pour que ça serve à qq'un d'autre ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2147340
bjone
Insert booze to continue
Posté le 27-06-2012 à 15:34:48  profilanswer
 

aure31 a écrit :

J'ai finalement trouvé une autre solution, qui fait que je n'ai plus à réfléchir à un quelconque sens horaire ou anti-horaire... Pour une fois mon algo a marché du premier coup... :p
Merci tout de même pour votre aide! :-)


A mon avis tu vas avoir des cas foireux que tu n'as pas imaginé ^^


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  algo calcul de volume objet 3d

 

Sujets relatifs
suivi d'un objet en opencvsuivi d'un objet en opencv
Attribuer tableau à chaque objet d'une classeconseil algo pour un projet
Calcul de la norme d'un vecteur généré de façon aléatoire en langage Caide programmation orientée objet
translation objet 3DDeveloppement: serious game avec Unity 3D
PHP : Calcul de moyenne par modalité 
Plus de sujets relatifs à : algo calcul de volume objet 3d


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR