je me suis appreçu qu'on ne parle meme pas des calculs de vecteurs dans la FAQ matrice et quaternion alos que ce serais surement un des sujet qui aiderais le plus les debutant donc je me lance. (dans le desordre )
Qu'est ce qu'on vecteur ?
Un vecteur peut etre vu comme une matrice à une seule colonne. par exemple, un vecteur 3D va se representer grace à un triplet {x,y,z}. On peut utiliser les vecteurs comme des positions dans l'espace ou comme des directions. Par exemple, en 3D, un vertex sera un vecteur position alors qu'une normale sera un vecteur direction.
Comment calculer les produit scalaire entre deux vecteurs ?
le produit scalaire entre deux vecteurs est la somme des produits composantes à commposantes des vecteurs et se calcul de la façon suivante :
scalaire = v1.x*v2.x + v1.y*v2.y + v1.z*v2.z
avec v1 et v2 des vecteurs 3D (il suffit de supprimer les calculs en Z pour passer en 2D)
Que represente le produit scalaire entre deux vecteurs ?
Si les deux vecteurs sont normalisé (voir qu'est ce qu'un vecteur normalisé), le produit scalaire represente le cosinus de l'angle entre les deux vecteurs.
on peut aussi utiliser le produit scalaire pour effectuer une projection d'un vecteur sur un autre (voir comment calculer la projection d'un vecteur sur un autre).
Lorsque les vecteur represente des directions, on peut utiliser le produit scalaire pour savoir si les deux vecteurs sont dirigé dans le meme sens (vois comment savoir si deux vecteurs sont dans le meme sens).
celle la est a compléter, il existe surement plein d'autres utilisation.
qu'est ce qu'un vecteur normalisé ?
Un vecteur normalisé est un vecteur dont la norme est egale à 1 (voir qu'est ce que la norme d'un vecteur)
Les vecteur normalisé sont très utilisé en 3D, notamment pour representer des normales.
comment calculer la projection d'un vecteur sur un autre ?
le calcul de la projection d'un vecteur sur un autre se fait à l'aide du produit scalaire.
soit V1 et V2 deux vecteurs, "." represente le produit scalaire. la projection de V1 sur V2 se fait de la façon suivante :
scalaire = V1.V2
VResult = V2 * scalaire
où VResult est le vecteur résultat.
comment savoir si deux vecteur sont dans le meme sens ?
On peut savoir si deux vecteur sont dans le meme sens en regardant leur produit scalaire. Il existe cinq cas :
- le produit scalaire est inferieur à 0 : les vecteur sont de sens opposé
- les deux vecteurs sont normalisé et le produit scalaire vaut -1 : les deux vecteur sont de sens opposé et sont colineaires
- le produit scalaire vaut 0 : au moins un des vecteurs vaut 0
- le produit scalaire est superieur à 0 : les vecteur sont dans le meme sens
- les deux vecteur sont normalisé et le produit scalaire vaut 1 : les deux vecteurs sont identiques.
comment normaliser un vecteur ?
On peut normaliser un vecteur en divisant chaque composante par la norme du vecteur. Voici un code simple pour normaliser un vecteur :
(voir qu'est ce que la norme d'un vecteur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 float norme = v.getNorme(); v.x = v.x / norme; v.y = v.y / norme; v.z = v.z / norme;
qu'est ce que la norme d'un vecteur ?
La norme d'un vecteur est sa longeur absolue dans l'espace.
comment calculer la norme d'un vecteur ?
Le calcul de la norme d'un vecteur est reès simple, il s'agit simplement de sa distance heuclidienne qui se calcul comme ceci :
norme = sqrt(v.x*v+x + v.y*v.y + v.z*v.z)
On peut s'appercevoir ici que la norme du vecteur est en fait la racine carré du produit scalaire du vecteur avec lui meme.
Attention neanmoins à limiter le plus possible l'utilisation de ce calcul. En effet, le calcul de racine carré est relativement lent, il est donc préférable de l'éviter autant que possible dans une application temps réel.
Comment calculer le symetrique d'un vecteur par rapport à un autre ?
Le symetrique d'un vecteur par rapport à un autre se calcul comme ceci :
scalaire = V1 . V2
VTemp = V2 * (scalaire * 2)
VResult = VTemp + V1
avec V1 le vecteur pour lequel on souhaite calculé le reflet, V2 le vecteur "axe de symetrie" et "." le produit scalaire
---------------------------------------------------
Bon je m'arrete la pour l'instant, il y a probablement de chose à modifier/affiner, et des accents a ajouté (firefox oblige ) dans ce que j'ai ecrit.
dans la liste des choses à ajouter, il y a :
- produit vectoriel
- calcul de l'angle entre deux vecteur
- liens avec les matrices ?
- surement pleins d'autres
Partager