118 votes

Calcul du produit en croix d'un vecteur 2D

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 y y' = 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 pour N dimensions.

2voto

J'utilise le produit en croix 2d dans mon calcul pour trouver la nouvelle rotation correcte d'un objet sur lequel agit un vecteur force en un point arbitraire par rapport à son centre de masse. (Le scalaire Z.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X