IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Mauvais calcul volumique(tetraedre)


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 98
    Par défaut Mauvais calcul volumique(tetraedre)
    Bonjour,
    actuellement je travail, sur une generation de tetraedres 3D sous VS2010 c++.
    Les tetraedres sont générés de tailles petits, moyens ou grands de façon aleatoire et biensur qui ne sont pas en contact les uns avec les autres.

    En ne générant qu'un seul, j'obtiend un bon volume mais plus ils sont nombreux et plus le volume total est petit.
    parexemple en générant 100 tetraèdres j’obtiens un volume inferieur à 1%.
    j'utilise la formule v=H*B*1/3
    avec H->la hauteur et B->la surface de base.

    -volume(codes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    double Tetraedre3D::Volume(Vertex _point) const
    {
    	double aire_base;
    	double hauteur,hauteur1;
    	double norme;
     
    	Vecteur v1;
    	Vecteur v2;
    	Vecteur v3;
     
    	v1.setCoordx(this->getpVertex(1).getCoordx() - this->getpVertex(0).getCoordx());
    	v1.setCoordy(this->getpVertex(1).getCoordy() - this->getpVertex(0).getCoordy());
    	v1.setCoordz(this->getpVertex(1).getCoordz() - this->getpVertex(0).getCoordz());
    	v2.setCoordx(this->getpVertex(2).getCoordx() - this->getpVertex(0).getCoordx());
    	v2.setCoordy(this->getpVertex(2).getCoordy() - this->getpVertex(0).getCoordy());
    	v2.setCoordz(this->getpVertex(2).getCoordz() - this->getpVertex(0).getCoordz());
     
    	v3 = v2 ^ v1;
    	norme = (double) sqrt(v3.getCoordx()*v3.getCoordx() + 
    							v3.getCoordy()*v3.getCoordy() + 
    							v3.getCoordz()*v3.getCoordz());
     
    	aire_base = norme / 2;
     
    	v1 = this->normale;
    	v2.setCoordx(_point.getCoordx() - this->getpVertex(0).getCoordx());
    	v2.setCoordy(_point.getCoordy() - this->getpVertex(0).getCoordy());
    	v2.setCoordz(_point.getCoordz() - this->getpVertex(0).getCoordz());
     
    	hauteur1 = v2 % v1;
    	hauteur = fabs(hauteur1);
     
    	return  (aire_base * hauteur)/3;
     
    }

    Je voudrais solliciter votre aide(des idées ou une correction du code) afin d'obtenir un bon calcul volumique.

    Merci

  2. #2
    Membre actif Avatar de CompuTux
    Homme Profil pro
    Développeur Python et Django
    Inscrit en
    Août 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Python et Django
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2004
    Messages : 82
    Par défaut
    Salut,

    Je vais essayer de t'aider dans une certaine mesure. Je te conseille d'appliquer judicieusement la formule du volume d'un parallélépidède définie à l'aide du déterminant d'une matrice, puisque le volume du tétraèdre est le 1/6 de ce résultat.

    Voir ici pour la formule.

    Je ne sais pas si cela sera plus simple que ton calcul, mais je vois l'algorithme comme ceci :

    1) définir les vecteurs AB, AC, et AD qui correspondent aux arêtes d'un sommet A du tétraèdre auquel on adjoint un repère orthonormé.
    2) définir la matrice (le tableau 3x3) suivant M=[[x_AB, y_AB, yAB],[x_AC, y_AC, yAC],[x_AD, y_AD, yAD]].
    3) Appliquer le déterminant de cette matrice, utiliser une fonction pré-existante d'une bibliothèque d'algèbre linéaire, ou calculer les 6 produits en dur.
    4) le volume est le 1/6 de ce résultat.

    Les avantages de cet algo sont que tu définies et accèdes aux propriétés de ton objet tétraèdre une seule fois rassemblées dans le tableau M.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 98
    Par défaut
    Bonjour frenchem67 ,
    je suis entrain de calculer le volume selon la formule que tu ma donnée , je trouve des erreurs au niveau du calcul de determinant et voulais utiliser la fonction pré-existante d'une bibliothèque d'algèbre linéaire dont tu as parler.
    merci

  4. #4
    Membre actif Avatar de CompuTux
    Homme Profil pro
    Développeur Python et Django
    Inscrit en
    Août 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Python et Django
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2004
    Messages : 82
    Par défaut
    Salut,

    Je pense que je me suis trompé dans la matrice, il s'agit en réalité de :

    M= [[x_AB, x_AC, x_AD],[y_AB, y_AC, y_AD],[z_AB, z_AC, z_AD]]

    Je ne connais guère le C++, mais quelle bibliothèque veux tu utiliser?

    @+

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 98
    Par défaut
    bonjour, je suis arriver a le résoudre hier nuit a travers la méthode v1.(v2^v3).
    merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mauvais calcul des stats
    Par elkamaro dans le forum Administration
    Réponses: 4
    Dernier message: 27/07/2010, 13h45
  2. calcule donne mauvais résultat
    Par fpascal dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/12/2008, 10h26
  3. Réponses: 4
    Dernier message: 15/03/2007, 08h02
  4. Mauvais calcul de a et de b dans f(x) = ax + b ?
    Par _SamSoft_ dans le forum C
    Réponses: 4
    Dernier message: 22/02/2007, 15h44
  5. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 01h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo