Salutations à tous,
Tout d'abord, navré si cette question ne se trouve pas au bon endroit ... j'ai longuement soupesé les différentes sections et celle-ci me semblait la plus adaptée. D'après mes souvenirs (pas très récents ) la théorie des ensembles et le calcul matriciel qui en découle faisaient partie du programme supérieur !
En préambule j'ai fait pas mal de recherche internet sur le calcul appliqué à l'infographie, y compris sur ce forum, et il est très dur de trouver des sources détaillées sans être "généralistes". Si vous aviez des sites de référence à me conseiller je suis preneur
Mon problème immédiat est assez simple sur le papier, mais mes souvenirs de prépa trop lointains pour en faire usage ... voici les données :
- Synopsis :
Comment calculer rapidement la dérivée en un point de l'espace d'une matrice 4x4 transformant ce point, sachant qu'il s'agit d'une banale transformation affine (translate / rotate / scale / shear) ? Comment exprimer cette matrice dans différents repères ?
- Version longue, données disponibles :
Je réalise avec un ami un moteur de simulation de fluides pour une application de modélisation 3D (Maya). J'en suis à implémenter le couplage fluide/solides, avec transmission de la vélocité du solide au liquide avec lequel il entre en collision. Je cherches donc à récupérer une matrice de transformation dans le temps du solide entrant en collision, d'une étape de calcul à la suivante. Je dispose pour ça :
* De la topologie du solide (faces -> edges -> vertex) exprimée dans le repère monde.
* De la "worldMatrix" du solide, c-a-d la matrice de transformation 4x4 permettant de passer du repère local du solide au repère monde. Cette matrice est récupérable à tout instant T, y compris "entre" deux étapes de calcul par interpolation.
* Des "worldMatrix" et "worldInverseMatrix" de mon espace de simulation qui permettent comme leur nom l'indique de passer du repère monde au repère local de mon liquide (qui n'est pas celui du solide entrant en collision !) et lycée de versailles.
- Propriétés identifiées :
Le solide est un "rigid body", c'est à dire grosso modo un objet non déformable. Sa topologie reste invariable au fil du temps, et la worldMatrix positionnant l'objet est donc unique et définie en chacun de ses points.
Les matrices de transformation manipulées sont des matrices 4x4 classiques comme décrit ci-dessous :
http://download.autodesk.com/us/maya/2008help/Nodes/transform.html
Elles présentent quelques propriétés intéressantes à priori, comme une inversibilité beaucoup plus simple que dans le cas général par exemple. J'ignore totalement si ça facilite quoi que ce soit dans mon cas.
- Petit exemple :
Disposant de la position de mon objet à un moment T, et au suivant (T+1), je cherches donc à obtenir la variation de cette "position" de T à T+1. Par exemple si l'objet tourne autour de son axe X d'un angle "rx" à chaque frame de calcul, sa worldMatrix ressemblera à quelquechose comme :
mat(T = 0)
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ 0 0 0 1 ]
mat(T = 1)
[ 1 0 0 0 ]
[ 0 cos(rx) sin(rx) 0 ]
[ 0 -sin(rx) cos(rx) 0 ]
[ 0 0 0 1 ]
mat(T)
[ 1 0 0 0 ]
[ 0 cos(T * rx) sin(T * rx) 0 ]
[ 0 -sin(T * rx) cos(T * rx) 0 ]
[ 0 0 0 1 ]
etc.
Intuitivement (qui a dit "empiriquement" ? ) j'aurais tendance à penser que dans ce cas par exemple, la matrice pour passer de T à T+1 (disons dMat) est équivalente à mat(T = 1), puisqu'il s'agit d'une rotation d'un "pas".
Mathématiquement j'ai énormément de mal à me faire une idée de comment obtenir cette matrice sachant que :
- la transformation complète de l'objet est bien plus complexe que ça (combinaison de la rotation, translation, scale etc.).
- il ne s'agit pas d'une simple différence du type (mat(T+1) - mat(T)).
- la solution que j'imagine ci-dessus ne ressemble en rien à la dérivation de quelque terme que ce soit.
- la notion de "matrice dérivée" me semble d'ailleurs bien abusive dans un contexte où le temps est discrétisé, et l'animation de l'objet observé non linéraire (la "pas" de rotation n'est pas nécessairement fixe, l'interpolation entre deux étapes peut être quadratique et non linéaire, sans oublier l'intervention humaine sur les données dans le pire des cas ...).
Une extension au problème est que je dois obtenir cette "dMat" exprimée dans mon repère de simulation, et je ne sais pas trop comment faire ... autant "transformer un point" (quaternion) ne me pose pas de problème, autant "transformer une transformée" me semble beaucoup plus discutable.
A noter que vu la précision toute relative de la "question" et mes compétences risibles en maths, je ne cherche pas de solution clefs en main mais plus des pistes, suggestions sur la façon de se représenter les choses, liens sur des supports décrivant ce type de problématique etc. Je ne suis quand même pas le seul à me poser ce genre de question ?!
Et si vous avez eu le courage de lire jusqu'ici merci pour votre attention