De wikipedia :
le produit en croix est une opération binaire sur deux vecteurs dans un fichier tridimensionnel espace euclidien qui donne un autre vecteur perpendiculaire au plan contenant les deux vecteurs d'entrée.
Étant donné que la définition n'est définie qu'en trois ( ou sept, un et zéro ), comment calcule-t-on le produit croisé de deux vecteurs à deux dimensions ?
J'ai vu deux mises en œuvre. L'une renvoie un nouveau vecteur (mais n'accepte qu'un seul vecteur), l'autre renvoie un scalaire (mais c'est un calcul entre deux vecteurs).
Implémentation 1 (renvoie un scalaire) :
float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
return (v1.X*v2.Y) - (v1.Y*v2.X);
}
Implémentation 2 (renvoie un vecteur) :
Vector2D CrossProduct(const Vector2D & v) const
{
return Vector2D(v.Y, -v.X);
}
Pourquoi les différentes mises en œuvre ? À quoi servirait l'implémentation scalaire ? À quoi servirait l'implémentation vectorielle ?
La raison de ma question est que je suis en train d'écrire moi-même une classe Vector2D et que je ne sais pas quelle méthode utiliser.
15 votes
L'implémentation 2 est erronée. Vous avez besoin de deux vecteurs pour former un produit en croix.
10 votes
L'implémentation 2 fait tourner le vecteur donné v de -90 degrés. Remplacez -90 par
x' = x cos - y sin
yy' = x sin + y cos
. Une autre variante de cette mise en œuvre consisterait àreturn Vector2D(-v.Y, v.X);
qui est une rotation v de +90 degrés.3 votes
@legends2k : Il faut noter que l'implémentation 2 est une extension de l'implémentation 2. en utilisant le déterminant pour évaluer le produit en croix : il suffit de supprimer la dernière ligne et la dernière colonne. Une telle extension a toujours
N-1
opérandes pourN
dimensions.5 votes
L'implémentation 1 calcule le magnitude du produit croisé.
2 votes
@MateenUlhaq en quelque sorte, c'est le " signé magnitude"
0 votes
Comme @mattias l'a commenté dans une réponse : Mise en oeuvre 2 est un produit croisé du vecteur fourni avec l'axe z ;
1 votes
@bobobobo En algèbre vectorielle, le produit en croix dans l'espace d est souvent défini comme une opération multilinéaire (un "produit") prenant d-1 vecteurs et produisant un vecteur dans leur complément orthogonal. Donc non, vous n'avez pas besoin de deux vecteurs pour former un produit en croix. Voir ici.