Algebre Lineaire - Basics
Au travers de quelques exemples de code nous allons aborder les principales operations de base de l’algèbre Linéaire utilise dans la 3D.
Les vecteurs sont largement utilisés pour représenter des positions, des directions de mouvement, des directions de rayon de lumiere et des couleurs dans le domaine de la 3D. Par exemple, pour représenter un point dans l’espace 3D, on peut utiliser un vecteur avec trois composantes x, y et z. Un vecteur de direction peut être utilisé pour représenter la direction dans laquelle une caméra ou une source de lumière pointe. Les vecteurs peuvent également être utilisés pour représenter des couleurs, avec chaque composante du vecteur représentant une couleur rouge, verte ou bleue
import maya.api.OpenMaya as om
# Définition des deux points
point1 = om.MPoint(0, 0, 0)
point2 = om.MPoint(1, 1, 1)
# Calcul du vecteur entre les deux points
vector = om.MVector(point2 - point1)
# Calcul de la magnitude du vecteur
magnitude = vector.length()
# Affichage du résultat
print(f"Le vecteur entre les deux points est {vector}, et sa magnitude est {magnitude}.")
Les matrices sont utilisées pour effectuer des transformations géométriques sur les objets en 3D. Par exemple, une matrice de transformation peut être utilisée pour déplacer, tourner ou redimensionner un objet en 3D. Les matrices peuvent également être utilisées pour convertir des coordonnées de l’espace objet en coordonnées de l’espace écran, afin que les objets en 3D puissent être affichés à l’écran.
import maya.api.OpenMaya as om # Définir les trois vecteurs v1 = om.MVector(1, 1, 1) v2 = om.MVector(0, 0, 1) v3 = om.MVector(0, 1, 1) # Normaliser les vecteurs v1.normalize() v2.normalize() v3.normalize() # Calculer un vecteur orthogonal à v1 et v2 v4 = v1 ^ v2 # Normaliser v4 v4.normalize() # Recalculer v3 pour s'assurer qu'il est orthogonal à v1 et v4 v3 = v4 ^ v1 v3.normalize() # Créer une matrice de transformation à partir des trois vecteurs matrix = om.MMatrix([[v1.x, v1.y, v1.z, 0], [v4.x, v4.y, v4.z, 0], [v3.x, v3.y, v3.z, 0], [0, 0, 0, 1]]) print(matrix)
Normalisation de vecteur : La normalisation d’un vecteur consiste à le diviser par sa magnitude, de sorte que sa longueur soit égale à 1. Cela est utile car les vecteurs normalisés ont des propriétés intéressantes, comme le fait que leur produit scalaire (voir ci-dessous) est compris entre -1 et 1.
Produit scalaire : Le produit scalaire (ou produit point) est une opération qui prend deux vecteurs en entrée et produit un nombre scalaire qui est égal au produit des magnitudes des deux vecteurs multiplié par le cosinus de l’angle entre les deux vecteurs. Il est souvent utilisé pour déterminer si deux vecteurs sont parallèles ou perpendiculaires.
Produit vectoriel : Le produit vectoriel (ou produit croisé) est une opération qui prend deux vecteurs en entrée et produit un troisième vecteur qui est perpendiculaire aux deux vecteurs d’entrée. Sa magnitude est égale au produit des magnitudes des vecteurs d’entrée multiplié par le sinus de l’angle entre les deux vecteurs.
Matrice de transformation : Une matrice de transformation est une matrice utilisée pour transformer des vecteurs d’un système de coordonnées à un autre système de coordonnées. Elle est souvent utilisée en 3D pour effectuer des transformations géométriques comme la rotation, la translation et l’échelle.
Matrice de transformation homogène : Une matrice de transformation homogène est une matrice de transformation 4×4 qui inclut à la fois des transformations linéaires et des transformations non linéaires comme la perspective. Elle est souvent utilisée en 3D pour effectuer des transformations géométriques plus complexes que celles qui peuvent être effectuées avec une matrice de transformation 3×3.
Le code suivant utilise des matrices pour effectuer des transformations géométriques dans un environnement en 3D appelé « monde ».
Nous allons exprimer 2 matrices dans le « monde », cela signifie qu’elles sont positionnées dans un espace de coordonnées commun qui sert de référence.
Puis nous allons transferer une des matrices dans l’espace locale de l’autre. Cette matrice est utile pour représenter des objets qui ont leur propre système de coordonnées, comme des articulations de personnage.
Pour cela nous allons faire appel a la matrice inverse qui est une opération qui permet de retrouver la transformation d’origine à partir de la transformation inversée.
La projection de matrices est une opération qui permet de projeter une matrice exprimée en « monde » dans un autre système de coordonnées, comme une matrice parente. Cela permet de connaître la position et l’orientation de l’objet par rapport à un ‘parent’.
import maya.api.OpenMaya as om # Définition de la première matrice exprimée dans le monde world_matrix1 = om.MMatrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) # Définition de la deuxième matrice exprimée dans le monde world_matrix2 = om.MMatrix([[0.5, 0.5, 0.5, 1], [0, 1, 0, 2], [1, 0, 0, 3], [0, 0, 0, 1]]) # Récupération de la matrice de transformation du monde 1 vers le monde 2 world_matrix2_to_1 = world_matrix2 * world_matrix1.inverse() # Calcul de la matrice locale de la première matrice dans l'espace de la deuxième matrice local_matrix1 = world_matrix1 * world_matrix2_to_1.inverse() print(local_matrix1)
Monde : En informatique graphique, le « monde » est un espace de coordonnées dans lequel tous les objets de la scène sont définis. Les coordonnées des objets dans le monde sont souvent exprimées à l’aide de matrices de transformation.
Transformation géométrique : Une transformation géométrique est une fonction qui modifie la position, l’orientation ou la taille d’un objet. Elle peut être exprimée à l’aide d’une matrice de transformation.
Multiplication de matrices : La multiplication de matrices est une opération qui combine deux matrices pour produire une nouvelle matrice. Cette opération est utilisée pour combiner des transformations géométriques, telles que des translations et des rotations.
Matrice inverse : La matrice inverse d’une matrice carrée est une matrice qui, lorsqu’elle est multipliée par la matrice d’origine, produit la matrice identité. Elle est souvent utilisée pour inverser les effets d’une transformation géométrique.
Matrice locale : La matrice locale d’un objet est une matrice de transformation qui définit la position, l’orientation et la taille de l’objet par rapport à son parent. Elle est souvent utilisée pour déplacer, faire pivoter et redimensionner un objet par rapport à son parent.
Projection de matrices : La projection de matrices est une opération qui permet de convertir les coordonnées d’un objet d’un espace à un autre. Dans le code fourni, nous projetons la matrice locale d’un objet dans l’espace de son parent en utilisant la matrice de transformation qui relie les deux espaces.
Les espaces vectoriels peuvent être utilisés pour représenter des transformations linéaires, telles que l’agrandissement ou la rotation d’un objet.
Les vecteurs et les matrices sont largement utilisés en graphisme informatique pour représenter des positions, des directions, des couleurs et des transformations géométriques en 3D. Les concepts de vecteurs linéairement indépendants, de base et d’espace vectoriel sont également importants pour créer des modèles 3D complexes et pour représenter des transformations linéaires.