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

Mathématiques Discussion :

Orientation d'un objet dans une scène


Sujet :

Mathématiques

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut Orientation d'un objet dans une scène
    Bonjour à tous,

    Dans une scène 3D (Vtk), je souhaite orienté un objet.
    Pour celà, je selectionne 3 points sur cet objet qui sont censés représenter une coupe horizontale.

    J'obtiens alors un plan P.

    Ensuite, je calcule la matrice de rotation entre le vecteur normal à P et le vecteur unitaire (0,0,1).

    J'applique ensuite ma matrice à tout mon objet.

    Le résultat n'est pas celui escompté, mon objet est tout déformé.
    Quelqu'un peut il me dire ou mon raisonnement est incorrect ?

    Merci par avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si j'ai bien compris, votre objet n'est pas renversable, c'est à dire qu'il pourrait être une chaise sur ses quatre pieds, ou un vase de fleurs posé sur une table.
    Il s'agit là du contexte caractéristique de l'environnement 2.5 D. Chaque objet contient une verticale qui reste toujours verticale. Chaque point de l'objet a une projection horizontale XY, plus une hauteur Z.
    Il est bien plus facile, donc plus économique en informatique, de travailler dans ce système 2.5D.
    La matrice de rotation s'écrit [1,1,1,-1}
    ou
    X = x . cos(A) + y . sin(A)
    Y = x . sin(A) - y . cos(A)

    Quant à la rotation dans un espace 3D, ce sujet a été traité il y a pas très longtemps, mais c'est assurément beaucoup plus compliqué.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut
    Merci bien pour la réponse.
    Je n'ai pas très bien compris votre réponse, par conséquent je ne sais pas si vous avez compris mon problème.

    Je reprend l'exemple avec un vase.

    Imaginons que dans mon logiciel, je charge le vase (maillage) dans ma scène et que par défaut celui se retrouve à la position horizontale (ie parallèle au plan Pxy).

    Pour orienter mon vase, je vais sélectionner sur mon vase 3 points censés représenter une coupe horizontale de mon vase.

    Après ma rotation, cette coupe doit donc se retrouver parallèle au plan Pxy.

    Edit :
    En parcourant un peu le web, je pense que ce n'est pas vraiment une matrice de rotation mais plus une matrice de changement de repère que je dois calculer.

    Sachant que j'ai mes 3 points P1, P2, P3 + la normale n du plan P définit par des 3 points, comment calculer ce changement de repère de tel sorte que le le plan Pxy aille en P ?

    Merci par avance.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Donc, nous sommes bien d'accord, le vase ne s'est pas renversé.
    Il s'agit effectivement de changement de base, mais j'ai continué avec la notion de rotation, qui est d'ailleurs générale (explications nécessaires ).
    Ce que je voudrais expliquer d'abord, et c'est très important : puisque le vase ne s'est pas renversé, on peut travailler dans un système 2.5D.
    Les transformations sont en général un produit de 3 transformations élémentaires.
    1- la translation
    2- la rotation
    3- l'affinité.

    1- la translation : vous déplacez votre vase sur un autre meuble, mais de telle façon que les fleurs soit toujours dirigées vers le soleil (supposé fixe)
    2- la rotation : votre vase reste à la même place sur la table, mais vous le tournez (sur lui-même) de façon que les fleurs suivent le parcours apparent du soleil.
    3- l'homothétie : supposez que votre vase soit sur le tour du potier, au fur et à mesure de son travail, il va s'allonger (comparaison un peu cavalière).

    La formule générale de cette transformation, dans le plan horizontal, puisqu'on a vu que la troisième coordonnée pouvait être traitée indépendamment est
    X = TX + x . XX + y . XY
    Y = TY + x . YX + y . YY

    Il y donc 6 paramètres, ce qui nécessite 3 points connus dans les deux systèmes.
    XX, XY, YX, YY sont de la forme cosA . LX ou sinA . LY etc.
    A est l'angle de rotation, LX et LY sont les paramètres de l'affinité.

    Dans le cas présent, pas d'affinité, mais une 3è coordonnée. Le système sera
    X = TX + x . cosA + y . sinA
    Y = TY + x . sinA - y . cosA
    Z = TZ + z
    (je n'ai pas fait de faute de signe. Ce qui est toujours vrai est que le nombre de signes '-' est impair)

    Avec cette formule, applicable au vase de l'hypothèse, deux points homologues dans les 2 systèmes sont suffisants.
    Le premier détermine TX, TY et TZ, le vecteur 1->2 détermine l'angle A

    Si vous voulez un changement de base en 3D, théoriquement 3 points sont suffisants, à condition qu'il ne déterminent pas un plan parallèle à l'un des 3 plans de référence. Quatre points sont souvent nécessaires, mais ils ne doivent pas être coplanaires.
    Au lieu de 4 paramètres, on en a 12, mais j'ai fait une fonction qui résout cela.

  5. #5
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 815
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 815
    Points : 7 644
    Points
    7 644
    Par défaut
    Salut,

    Citation Envoyé par azboul Voir le message
    Le résultat n'est pas celui escompté, mon objet est tout déformé.
    Ca sent le problème de dimension sur la matrice ça...


    Citation Envoyé par azboul Voir le message
    Quelqu'un peut il me dire ou mon raisonnement est incorrect ?
    Il nous faudrait les détails.
    LA matrice de rotation à partir de deux vecteurs, j'ai un peu de mal à voir comment tu la définis... donc si tu pouvais détailler un peu...
    Quelles dimensions pour ta matrice? 2x2? 3x3? 4x4? (on ne rigole pas au fond...)

    Comme le dit Pierre, avec 3 points tu as suffisamment de données pour définir ta transformation... en les choisissant bien (ce qui permet de supprimer la limitation du plan parallèle à un des plans de référence).

  6. #6
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut
    Merci à vous deux pour vos réponses.

    Pierre, il faut que je digère ton commentaire. J'ai par exemple du mal à comprendre pourquoi je peux raisonner en 2.5D.

    Ma matrice de rotation est définit ainsi :

    - soit , n normal à P, normalisée.

    - je choisit un vecteur unitaire normale à n :

    -je calcule ainsi est une base orthogonale.

    Ma matrice est une matrice 3x3 formée par les coordonnées de u,v,n. Je prend ensuite sa transposée pour obtenir ma matrice de rotation.

    Enfin, comme je travaille sous Vtk, j'insere cette dernière matrice dans une matrice 4x4 avec comme dernier vecteur colonne (0,0,0,1).

    Finalement j'applique cette matrice 4x4 à mon objet.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    A mon avis tout le problème vient de l'utilisation du calcul matriciel.
    Une matrice est un outil mathématique pour représenter une application dans un ensemble vectoriel à N dimensions.
    Il y a trop longtemps que j'ai étudié les matrices pour que je m'y remette. Donc je n'utilise pas le calcul matriciel, mais je calcule des transformations en informatique depuis 30 ans.

    Notre domaine d'utilisation et de représentation est un espace en 3 dimensions.
    Etant donné l'importance de la verticale, il est intéressant, lorsque c'est possible, de travailler dans un espace 2.5D, c'est à dire qu'un vecteur est bien connu par sa projection sur le plan horizontal. Tant que ce vecteur appartient à un objet tel que le vase de fleurs, toutes les opérations, transformation en particulier, faites sur ce vecteur dans le plan pourront être appliquées dans l'espace. Autrement dit, la coordonnée Z est indépendante des coordonnées X et Y.
    Ceci est important, puisque cela permet de diviser la masse des calculs par 6 (lu quelque part).
    Donc, j'essaye de vous aider à faire un changement de base, mais je n'utilise pas le calcul matriciel.
    Pour l'opération présente, 2 points homologue sont nécessaires et suffisants.
    Il n'est pas indispensable que les 2 vecteurs soient égaux. Tut le problème est de fixer la règle du jeu.

  8. #8
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 815
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 815
    Points : 7 644
    Points
    7 644
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    A mon avis tout le problème vient de l'utilisation du calcul matriciel.
    A première vue, dans l'esprit, c'est bon.

    Reste que pour définir une matrice de rotation, il faut lier les vecteurs du repère avant rotation à ceux après rotation. Donc ici, savoir à quoi correspondent exactement les vecteurs u, v et n. Si on utilise leurs coordonnées telles quelles pour définir les composantes de la matrice de rotation, cela veut dire qu'il s'agit des vecteur unitaire du repère de départ. Est-ce le cas?

    De toute façon, même si ce n'est pas le cas, au pire on obtient la mauvaise rotation... mais pas une déformation du solide (qui nécessiterait d'entrer tous les coefficients adéquats pour modéliser les cisaillements et homothéties). A moins que tu n'aies fait une erreur dans ton code... ou dans les coefficients de la matrice...

  9. #9
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut
    Effectivement j'avais fait des erreurs de code.
    La théorie était bonne mais pas la pratique .

    J'ai donc corriger ces erreurs et je n'ai plus de déformation de mon maillage, juste une rotation.
    Donc finalement, je pense que cela suffit pour faire ce que je souhaite (pas besoin de partir vers des changements de repères, etc...).

    Merci à vous deux pour vos explications, ce sujet est un peu plus clair dans mon esprit.

  10. #10
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 815
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 815
    Points : 7 644
    Points
    7 644
    Par défaut
    Citation Envoyé par azboul Voir le message
    (pas besoin de partir vers des changements de repères, etc...).
    Quelque part, c'est ce que tu as fait!

    Si c'est résolu, tant mieux!

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

Discussions similaires

  1. Irrlicht 3D : Mouvement d'objets dans une scène
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 22/04/2013, 20h12
  2. Comment faire que des objets 3D ne se touchent pas dans une scène.
    Par ibrakola dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 16/05/2012, 01h40
  3. Réponses: 1
    Dernier message: 21/10/2009, 15h21
  4. Insérer un objet 3D dans une scène OpenGL
    Par choko83 dans le forum OpenGL
    Réponses: 11
    Dernier message: 08/10/2009, 14h03
  5. fixer un objet dans une scène en rotation
    Par amine84 dans le forum 3D
    Réponses: 1
    Dernier message: 30/08/2009, 03h39

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