![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Contribuez Vos contributions pour la rubrique 2D / 3D / Jeux : FAQs, codes sources, tutoriels, sondages, débats, idées, ... |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
![]() Date d'inscription: novembre 2003
Localisation: Paris
Âge: 24
Messages: 2 317
|
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 : Code :
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 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
__________________
Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
|
|
|
|
|
|
#2 (permalink) | |||||||
![]() Date d'inscription: juin 2006
Localisation: Luxembourg
Âge: 23
Messages: 5 536
|
Quelques remarques.
Citation:
Citation:
Citation:
Citation:
Citation:
Citation:
Citation:
Voilà, sinon, il y a pas mal de fautes d'orthographe que je n'ai pas corrigé. Edit: Calcul de l'angle entre deux vecteurs Si l'on dispose de deux vecteurs u =(xu,yu,zu) et v = (xv, yv, zv). L'angle aentre les vecteurs u et v n'est défini que si les deux vecteurs sont non nuls. Dans ce cas, le cosinus de l'angle vaut : a = <u,v> / (||u|| * ||v||) Où <u,v> désigne le produit scalaire et ||.|| la norme euclidienne. Ainsi : a= (xu * xv + yu * yv + zu * zv) / (racine(xu²+yu²+zu²) * racine(xv²+yv²+zv²)) Où racine désigne la racine carré.
__________________
Je ne répondrai à aucune question technique en privé Dernière modification par millie ; 01/01/2007 à 20h41 |
|||||||
|
|
|
|
|
#3 (permalink) | ||||
![]() Date d'inscription: décembre 2006
Localisation: Alger
Âge: 25
Messages: 757
|
Bonjour,
Citation:
scalaire = V1.V2 VResult = V2*scalaire/||V2||^2 Citation:
Citation:
Contre exemple: soient: V1=(1,0) et V2=(0,1): le vecteur symétrique de V1 par rapport à V2 est evident: V3=(-1,0), or: scalaire=0 VTemp=V2*(scalaire*2)=0 Vresult=VTemp+V1=V1 et il faut trouver -V1 pour ce cas Je pense que deux vecteurs sont symétrique par rapport à V si : -les 3 vecteurs V V1 et V3 appartiennent au même plan -ils ont la même projection sur V Citation:
a=cos( angle) Dernière modification par rostomus ; 31/12/2006 à 22h52 |
||||
|
|
|
|
|
#5 (permalink) | |
![]() Date d'inscription: juin 2006
Localisation: Luxembourg
Âge: 23
Messages: 5 536
|
Citation:
Oui oui, rectifié
__________________
Je ne répondrai à aucune question technique en privé |
|
|
|
|
|
|
#6 (permalink) | |
|
Membre Confirmé
![]() Date d'inscription: octobre 2005
Messages: 266
|
Que représente le produit vectoriel entre deux vecteur
Le produit vectoriel de deux vecteurs u et v est l'unique vecteur w qui vérifie: _ w est orthogonal à u et v. _ (u, v, w) est de sens direct. Si u = (ux, uy, uz) et v = (vx, vy, vz), alors w = (uy*vz-uz*vy, uz*vx-ux*vz,ux*vy-uy*vx). Si on connait l'angle a entre les deux vecteurs, on a ||w|| = ||u||*||v||*sin(a). Celà implique notamment que deux vecteurs colinéaires ont un produit vectoriel nul. Utilité du produit vectoriel Calcul des normales à un plan: Soit u et v deux vecteurs d'un plan. Alors le produit vectoriels de u et de v est une des normales du plan. Redesign de ce qu'à dit Millie sur le calcul de l'angle entre deux vecteurs: Calcul de l'angle entre deux vecteurs Si l'on dispose de deux vecteurs u =(xu,yu,zu) et v = (xv, yv, zv). L'angle entre les vecteurs u et v n'est défini que si les deux vecteurs sont non nuls. Dans ce cas : cos a = <u,v> / (||u|| * ||v||) sin a = ||u^v|| / (||u|| * ||v||) Où <u,v> désigne le produit scalaire, u^v le produit vectoriel et ||.|| la norme euclidienne. Ainsi : cos a = (xu * xv + yu * yv + zu * zv) / (racine(xu²+yu²+zu²) * racine(xv²+yv²+zv²)) sin a = ... (je ne tape pas la formule, elle est longue et je pense qu'il serait bien d'en faire une image pour plus de lisibilité) Ces méthodes permettent d'obtenir le sinus et le cosinus d'un angle pour un coût très faible. Citation:
|
|
|
|
|
|
![]() |
![]() |
||
[FAQ] [Mat/Quat]ajout calculs vectoriels
|
||
| Outils de la discussion | |
|
|