2008-10-28 40 views
55

de Wikipedia:Cálculo de la Cruz de un Vector 2D Producto

el producto vectorial es una operación binaria en dos vectores en un espacio euclidiano tridimensional que resulta en otro vector que es perpendicular al plano que contiene la dos vectores de entrada.

Dado que la definición solo se define en tres dimensiones (or seven, one and zero), ¿cómo se calcula el producto cruzado de dos vectores bidimensionales?

He visto dos implementaciones. Uno devuelve un nuevo vector (pero solo acepta un único vector), el otro devuelve un escalar (pero es un cálculo entre dos vectores).

Aplicación 1 (devuelve un escalar):

float CrossProduct(const Vector2D & v1, const Vector2D & v2) const 
{ 
    return (v1.X*v2.Y) - (v1.Y*v2.X); 
} 

Aplicación 2 (devuelve un vector):

Vector2D CrossProduct(const Vector2D & v) const 
{ 
    return Vector2D(v.Y, -v.X); 
} 

por qué el implementaciones diferentes? ¿Para qué usaría la implementación escalar? ¿Para qué usaría la implementación del vector?

La razón por la que pregunto es porque estoy escribiendo una clase Vector2D y no sé qué método usar.

+5

La implementación 2 es incorrecta. Necesita dos vectores para formar un producto cruzado. – bobobobo

+6

La implementación 2 gira el vector dado _v_ en -90 grados. Sustitúyase -90 en 'x '= x cos θ - y sin θ' y' y' = x sin θ + y cos θ'. Otra variación de esta implementación sería 'devolver Vector2D (-v.Y, v.X);' que gira _v_ en +90 grados. – legends2k

+0

@ legends2k: Vale la pena señalar que la implementación 2 es una extensión de [el uso del determinante para evaluar el producto cruzado] (https: //en.wikipedia.org/wiki/Cross_product # Matrix_notation): simplemente elimine la última fila y columna. Dicha extensión siempre tiene operandos 'N-1' para dimensiones' N'. –

Respuesta

84

La implementación 1 devuelve la magnitud del vector que resultaría de un producto transversal 3D regular de los vectores de entrada, tomando sus valores Z implícitamente como 0 (es decir, tratando el espacio 2D como un plano en el espacio 3D). El producto de cruce 3D será perpendicular a ese plano y, por lo tanto, tendrá 0 X & componentes Y (por lo tanto, el escalar devuelto es el valor Z del vector de producto cruzado 3D).

Tenga en cuenta que la magnitud del vector resultante del producto 3D cross también es igual al área del paralelogramo entre los dos vectores, lo que le da a Implementación 1 otro propósito. Además, esta área está firmada y puede usarse para determinar si la rotación de V1 a V2 se mueve en sentido antihorario o en el sentido de las agujas del reloj. También debe observarse que la implementación 1 es el determinante de la matriz 2x2 construida a partir de estos dos vectores.

La implementación 2 devuelve un vector perpendicular al vector de entrada que todavía está en el mismo plano 2D. No es un producto cruzado en el sentido clásico, sino consistente en el sentido de "dame un vector perpendicular".

Tenga en cuenta que el espacio euclidiano 3D se cierra bajo la operación de productos cruzados, es decir, un producto cruzado de dos vectores 3D devuelve otro vector 3D. Ambas implementaciones 2D anteriores son inconsistentes con eso de una forma u otra.

Espero que esto ayude ...

+4

En realidad, la implementación 2 es un producto cruzado de vy el vector unitario apunta hacia arriba en la dirección z. – mattiast

+0

@mattiast: cierto. Así es exactamente como se describe la operación 2D 'perp' en 3D. –

+0

@mattiast: Implementación 2 puede considerarse como una extensión del uso de un [determinante para calcular el producto cruzado] (https://en.wikipedia.org/wiki/Cross_product#Matrix_notation) --- simplemente elimine la última fila y columna. Cabe señalar que la implementación 1 es equivalente a: 'DotProduct (a, CrossProduct (b))', que es (¡muy elegantemente!) Consistente con la noción de un "producto de puntos perpendiculares" (que es lo que esa implementación 1 también es [y quizás con más precisión] conocido como!). –

41

En resumen: Es una notación abreviada de un truco matemático.

explicación larga:

No se puede hacer un producto cruzado con vectores en el espacio 2D. La operación no está definida allí.

Sin embargo, a menudo es interesante evaluar el producto cruzado de dos vectores suponiendo que los vectores 2D se extienden a 3D estableciendo su coordenada z a cero. Esto es lo mismo que trabajar con vectores 3D en el plano xy.

Si extiende los vectores de esa manera y calcula el producto cruzado de un par vectorial tan extendido, notará que solo el componente z tiene un valor significativo: x e y siempre serán cero.

Esa es la razón por la cual el componente z del resultado a menudo simplemente se devuelve como un escalar. Este escalar se puede utilizar, por ejemplo, para encontrar el devanado de tres puntos en el espacio 2D.

Desde un punto de vista puramente matemático, el producto cruzado en el espacio 2D no existe, la versión escalar es el truco y un producto 2D cruzado que devuelve un vector 2D no tiene ningún sentido.

9

Otra propiedad útil del producto cruz es que su magnitud se relaciona con el seno del ángulo entre los dos vectores:

| a x b | = | a | . | b | . sinusoidal (theta)

o

sinusoidal (theta) = | a x b |/(| A |. | B |)

Así, en aplicación 1 anterior, si a y b son conocidos de antemano para ser vectores unitarios a continuación, el resultado de esa función es exactamente ese valor sinusoidal().

+1

... que también es el doble del área del triángulo entre el vector ay el vector b. –

3

Estoy utilizando 2d producto cruzado en mi cálculo para encontrar la nueva rotación correcta para un objeto que está siendo actuado por un vector de fuerza en un punto arbitrario con respecto a su centro de masa. (El Z escalar).

3

Implementación 1 es punto de perp producto de los dos vectores. La mejor referencia que conozco para los gráficos 2D es la excelente serie Graphics Gems. Si está haciendo scratch en 2D, es realmente importante tener estos libros. El Volumen IV tiene un artículo llamado "Los placeres de los puntos de Perp" que abarca muchos usos para él.

Un uso importante de perp producto punto es conseguir que el escalado sin del ángulo entre los dos vectores, al igual que el producto dot devuelve el escalado cos del ángulo. Por supuesto, puede usar dot producto y perp dot product para determinar el ángulo entre dos vectores.

Here es una publicación y here es el artículo de Wolfram Math World.

Cuestiones relacionadas