Déterminant de deux vecteurs
Condidérons trois points \( A(x_A ; y_A), B( x_B ; y_B) \) et \( C( x_C ; y_C) \) dans un plan muni
d'un repère.
Vous savez caractériser l'alignement des trois points : les trois points A, B, C sont alignés si et seulement si les
vecteurs \( \overrightarrow{AB} \) et \( \overrightarrow{AC} \) sont colinéaires. Cette colinéarité se traduit, comme vous le savez, par le simple fait que les coordonnées des deux vecteurs sont proportionnelles, c'est-à-dire par l'égalité \( x_{\overrightarrow{AB}} y_{\overrightarrow{AC}} = y_{\overrightarrow{AB}} x_{\overrightarrow{AC}} \) ou encore :
\[ x_{\overrightarrow{AB}} y_{\overrightarrow{AC}} - y_{\overrightarrow{AB}} x_{\overrightarrow{AC}} =0 \]
On fait apparaître dans cette caractérisation un nombre important que l'on appelle le déterminant des deux vecteurs (relativement au repère fixé au départ). On note det( \( \overrightarrow{AB}, \overrightarrow{AC} \) ) le déterminant des vecteurs \( \overrightarrow{AB} \) et \( \overrightarrow{AC} \). On a ainsi :
\[ det( \overrightarrow{AB}, \overrightarrow{AC} ) = x_{\overrightarrow{AB}} y_{\overrightarrow{AC}} - y_{\overrightarrow{AB}} x_{\overrightarrow{AC}} \]
Python
Etudier et tester le petit programme suivant.
"""
Un repère du plan est fixé.
Les coordonnées des points sont données dans ce repère.
Un point A est donc ici représenté par un tuple de deux éléments :
A = (abscisse de A, ordonnée de A).
"""
def vecteur(A,B):
""" A=(A[0],A[1]) et B=(B[0],B[1]) deux points.
La fonction retourne le tuple des coordonnées du vecteur u=vec(AB),
c'est à dire (B[0]-A[0], B[1]-A[1])."""
return (B[0]-A[0], B[1]-A[1])
def determinant(u,v):
""" retourne le déterminant
des vecteurs u=(u[0],u[1]) et v=(v[0],v[1])."""
return u[0]*v[1]-u[1]*v[0]
def alignes(A,B,C) :
"""Un triplet A, B, C de points.
La fonction retourne True si A, B, C alignés,
et retourne False sinon."""
return determinant(vecteur(A,B),vecteur(A,C)) == 0
A = (1,1)
B = (3,3)
C = (5,5)
print("Les points A(1;1), B(3;3) et C(5;5) sont-ils alignés ? ", alignes(A,B,C) )
A = (1,1)
B = (3,3)
C = (5,7)
print("Les points A(1;1), B(3;3) et C(5;7) sont-ils alignés ? ", alignes(A,B,C) )
qui affiche :
Les points A(1;1), B(3;3) et C(5;5) sont-ils alignés ? True
Les points A(1;1), B(3;3) et C(5;7) sont-ils alignés ? False
Déterminant et sinus
On travaille maintenant dans un repère orthonormé \( (O; \overrightarrow{i}, \overrightarrow{j}) \).
Il existe une relation entre le déterminant de deux vecteurs et le sinus de l'angle entre ces deux vecteurs :
\[ det\left( \overrightarrow{AB}, \overrightarrow{AC} \right) = AB \times AC \times \sin\left( \overrightarrow{AB}, \overrightarrow{AC} \right) \]
Cette relation est une relation importante et vous en trouverez plusieurs démonstrations sur le web.
Une démonstration par les complexes
Utilisons ici ce que vous avez appris en cours de mathématiques sur les nombres complexes.
Nous exprimons dans un premier temps sous forme algébrique le produit du conjugué de l'affixe du vecteur \( \overrightarrow{AB} \) par l'affixe du vecteur \( \overrightarrow{AC} \) :
\( \overline{z_{\overrightarrow{AB}}} \times z_{\overrightarrow{AC}} = \left( x_{\overrightarrow{AB}} - i y_{\overrightarrow{AB}} \right) \times \left( x_{\overrightarrow{AC}} +i y_{\overrightarrow{AC}} \right) \).
Ce qui donne, après développement :
\[ \overline{z_{\overrightarrow{AB}}} \times z_{\overrightarrow{AC}} = \left( x_{\overrightarrow{AB}} x_{\overrightarrow{AC}} + y_{\overrightarrow{AB}} y_{\overrightarrow{AC}}\right) + i \left( x_{\overrightarrow{AB}} y_{\overrightarrow{AC}} - x_{\overrightarrow{AC}} y_{\overrightarrow{AB}} \right) \]
Ou encore : \[ \overline{z_{\overrightarrow{AB}}} \times z_{\overrightarrow{AC}} = \overrightarrow{AB} \cdot \overrightarrow{AC} + i \det\left( \overrightarrow{AB}, \overrightarrow{AC} \right) \]
Ce produit s'exprime donc à l'aide des nombres fondamentaux que sont le produit scalaire et le déterminant des deux vecteurs.
Exprimons maintenant ce produit sous forme trigonométrique.
Nous notons \( \alpha \) un argument du vecteur \( \overrightarrow{AB} \) et \( \beta \) un argument du vecteur \( \overrightarrow{AC} \).
Nous avons : \( \overline{z_{\overrightarrow{AB}}} = AB \times e^{-i\alpha} \) et \( z_{\overrightarrow{AC}} = AC \times e^{i\beta} \).
Le produit est donc : \( \overline{z_{\overrightarrow{AB}}} \times z_{\overrightarrow{AC}} = AB \times AC \times e^{ i (\beta - \alpha)} \).
On a par ailleurs \( \beta - \alpha = \left( \overrightarrow{i} , \overrightarrow{AC} \right) - \left( \overrightarrow{i} , \overrightarrow{AB} \right) \), c'est-à-dire (relation de Chasles sur les angles) : \( \beta - \alpha = \left( \overrightarrow{AB} , \overrightarrow{AC} \right) \).
Finalement : \( \overline{z_{\overrightarrow{AB}}} \times z_{\overrightarrow{AC}} = AB \times AC \times e^{ i \left( \overrightarrow{AB} , \overrightarrow{AC} \right)} \), ce qui se réécrit :
\[ \overline{z_{\overrightarrow{AB}}} \times z_{\overrightarrow{AC}} = AB \times AC \times \left( \cos\left(\overrightarrow{AB} , \overrightarrow{AC}\right) + i \sin\left(\overrightarrow{AB} , \overrightarrow{AC} \right) \right) \]
En identifiant les parties réelles et imaginaires des deux écritures obtenues pour notre produit, nous réobtenons une égalité que vous connaissez bien :
\[ \overrightarrow{AB} \cdot \overrightarrow{AC} = AB \times AC \times \cos\left(\overrightarrow{AB} , \overrightarrow{AC}\right) \]
et la formule analogue que nous avions annoncée :
\[\det\left( \overrightarrow{AB} , \overrightarrow{AC} \right) = AB \times AC \times \sin\left(\overrightarrow{AB} , \overrightarrow{AC}\right) \]
Tourne à gauche
Nous allons voir maintenant une application de ce qui précède. Cette application pourrait vous rendre service dans un jeu par exemple.
Nous disposons de trois points A, B, C dans le plan. Les trois points sont donnés par leurs coordonnées dans un repère fixé du plan. Un mobile (par exemple un personnage dans un jeu) part de A pour aller en B puis en C (en parcourant les segments [AB] puis [AC]).
En supposant les trois points non alignés, le mobile, lorsqu'il change de direction au point B, tourne à gauche ou tourne à droite.
Si vous avez un dessin sous les yeux, vous savez immédiatement lequel des deux cas s'applique. Mais un ordinateur ?
La question est donc d'écrire un programme (en langage python) qui permette à l'ordinateur de savoir si notre personnage tourne à gauche ou à droite.
Avant de lire la suite, relisez les paragraphes précédents et demandez-vous comment les utiliser pour répondre à cette question. Je suis certain que vous allez trouver le lien immédiatement...
Reste à programmer. Ce que l'on vous demandera dans les premiers exercices.