El producto cruzado de dos vectores da como resultado otro vector.
Se realiza sobre vectores en tres dimensiones, pero sigue siendo relevante para el tema.
Estamos tratando de resolver, que es determinar hacia qué lado girar para enfrentar un objeto hacia otro.
Como has visto anteriormente, aunque estamos trabajando con un entorno bidimensional, sí que
tiene una tercera dimensión que sale de la pantalla.
Dados los dos vectores V y W, el producto cruzado se define así.
Vaya.
Eso da un poco de miedo, ¿verdad?
Pero si lo examina detenidamente, verá por qué se llama producto cruzado, ya que multiplica cada componente de los vectores
con cada uno de los otros componentes.
Veámoslo así.
La primera parte es v punto y multiplicado por w punto z.
A continuación, los valores inversos de v z multiplicados por w y.
Entonces cruzamos v z con w x y luego v punto x con w z.
Entonces finalmente v x con w, y y v.
Y.
Con w x.
El vencedor resultante es uno que es perpendicular a los otros dos.
Ahora, lo interesante del producto cruzado es que no es reversible.
V Cross W no es igual a W cross.
V De hecho, si realiza la operación al revés, seguirá siendo desahuciado.
Esto es perpendicular a V y W, pero estará orientado en la otra dirección y podemos aprovechar este hecho para determinar
hacia dónde debe girar nuestro tanque.
Veamos un ejemplo de cómo funciona esto.
Aquí está el posicionamiento del tanque y el combustible, similar al ejemplo con el que estamos trabajando
en Unity y estos otros vectores para la dirección de avance y la dirección hacia el tanque.
El producto cruzado entre ellos da como resultado cero.
Cero.
-0. 7.
Ahora, veamos la situación cuando el combustible está en el otro lado.
Estos son los vectores relevantes y este es el producto cruzado 000. 7 para determinar si hacemos un giro en sentido contrario a las agujas del reloj
o en sentido contrario.
La pista está en los resultados de los productos cruzados.
Mira de cerca esos dos productos cruzados.
¿Cuál es la única diferencia?
¿Lo has resuelto?
Es la coordenada Z en el caso de que queramos girar en el sentido de las agujas del reloj.
La coordenada Z es un valor negativo.
En el caso de que queramos girar en sentido contrario a las agujas del reloj, el valor Z es un valor positivo.
Por lo tanto, de esto podemos deducir que si el valor Z del producto cruzado es menor que cero o negativo, entonces vamos a hacer
un giro en el sentido de las agujas del reloj.
De lo contrario, si es un valor positivo mayor que cero, entonces vamos a hacer un giro en sentido contrario a las agujas del reloj.
Ahora es el momento de ver cómo funciona esto en nuestro entorno con nuestro tanque.
Ahora, puede que no te hayas fijado mucho en los ángulos que se calculaban antes.
Si miramos hacia el combustible y pulsamos la barra espaciadora, nos daremos cuenta de que he alargado un
poco el vector verde multiplicándolo por diez en el código.
Así que nos enfrentamos al combustible aquí.
Se trata de un ángulo de dos.
Ahora si me doy la vuelta y digo, mira aquí arriba y lo presiono, ahora tengo un ángulo de 23.
Bueno, eso es genial.
Ahora, si giro mi tanque hacia abajo aquí, así que estoy tratando de conseguir como otro ángulo y golpear de nuevo.
Así que esto es, ya sabes, estoy recibiendo un ángulo de 24, pero digamos que era 23.
¿Cómo sé o cómo sabe este tanque, cuando se convierte en un personaje I, qué camino tomar?
¿Gira en este sentido o gira en este sentido para encarar el tanque?
Porque siempre que hacemos el cálculo del ángulo utilizando el producto DOT y nuestro coseno, obtenemos un ángulo
positivo.
No obtendremos un ángulo negativo.
Ahora, sí, la unidad proporciona un método de ángulo con signo que va a trabajar si es negativo o no.
Pero, ¿qué es lo que realmente se hace?
Vamos a utilizar el producto cruz, como acabamos de ver en la teoría, para saber si tenemos un giro
en el sentido de las agujas del reloj o en sentido contrario.
De acuerdo.
Así que vamos a volver a nuestro código y vamos a añadir en otro método llamado Cruz.
Así que este es mi ángulo de cálculo.
Verás que he multiplicado por diez el avance del tanque para que la línea verde sea más larga, por si quieres hacerlo también.
Y lo he hecho de 5 segundos para que permanezca en la pantalla un poco más.
Así que aquí abajo, vamos a hacer una cruz nula.
Vamos a pasar por dos vectores.
Así que el vector tres es V y el vector tres.
La segunda es una W.
Ahora, dentro de aquí, vamos a calcular el producto cruzado utilizando la fórmula para calcular
el producto cruzado, que es un montón de multiplicaciones y restas entre los valores X, Y
y Z.
Así que este es tu reto.
Esta es la fórmula.
De nuevo, lo que me gustaría que hicieras es completar esta cruz.
Así que en realidad realiza un cálculo de producto cruzado aquí entre V y W, y lo que quiero es que no
devuelva un vacío, sino que devuelva un vector tres.
Así que ese vector tres te va a dar ese vector perpendicular que es perpendicular a V y W cuando
se cruzan.
Así que ponle pausa al video.
Ahora ve y dale una oportunidad.
Y cuando volvamos, repasaré la solución contigo.
Bienvenido de nuevo.
¿Cómo lo has resuelto?
De acuerdo.
Aquí hay un montón de matemáticas, así que vamos a hacerlo poco a poco.
Así que crearemos un flotador para nuestra muda X y crearemos uno para nuestra muda Y y crearemos
uno para nuestra muda Z.
De acuerdo.
Así que la muda X va a ser igual ahora la forma en que recuerdo esto es si está calculando el valor
X, entonces está usando los valores Y y Z en el cálculo.
Si es la muda Y, está usando la X y la Z en el cálculo.
Así que no se utiliza en el cálculo, si eso tiene sentido.
Así que esto será el Y multiplicado por Z menos V, punto z multiplicado por w punto y.
Así que el siguiente será igual a todo menos a y.
Así que v punto x multiplicado por w punto z menos v punto z multiplicado por w punto x entendiendo el asunto.
Y finalmente tenemos la x multiplicada por y menos el punto y multiplicado por w x.
De acuerdo.
Así que sólo tenemos que juntarlos.
Así que devolvemos x muda dentro de, por supuesto, un nuevo vector tres, vector tres.
X, muda, y muda y z muda.
De acuerdo.
¿Cómo lo has resuelto?
Parece que me falta un paréntesis, así que es cuestión de hacerlos paso a paso con cualquiera de estas ecuaciones
realmente complejas.
Desglosarlas y hacerlas de una en una.
Así que pongamos esto a trabajar aquí arriba.
Así que lo importante es el valor Z que nos devuelve la cruz, ya sea en el sentido de las agujas
del reloj o en sentido contrario.
Así que crearemos un int para las agujas del reloj y lo pondremos a uno.
Y luego vamos a decir justo aquí, si la cruz de nuestro tanque hacia adelante y nuestra dirección del tanque o nuestra dirección de combustible, debería
decir la dirección de combustible.
Por lo tanto, si el cruce de esos dos puntos Z es menor que cero, entonces el reloj será igual a menos uno.
Y luego usaremos esto como un multiplicador para nuestro ángulo de giro.
Así que con el fin de convertir nuestro tanque sólo automáticamente dentro de este método, vamos a poner este punto de transformación,
punto de rotación.
Rotaremos alrededor del eje Z, que es el eje que sale de la pantalla para estas cosas 2D.
Así que cero cero y vamos a girar por el ángulo, que ya hemos calculado multiplicado por matemáticas f punto rad dos grados
porque tenemos nuestros ángulos que vienen en radianes.
Pero esta rotación utiliza un valor de grados y lo multiplicaremos por el sentido de las agujas del reloj para poder girar en un sentido
u otro.
Bien, vamos a probar esto para guardarlo.
Vuelve a la unidad.
Ahora, cuando pulsamos la barra espaciadora, nuestro tanque va a girar automáticamente para mirar el combustible por nosotros.
Y esto es como lo más básico para crear ese método de mirar que usamos anteriormente.
Así que vamos a pulsar el play.
Bien, si presiono la barra espaciadora, mi tanque se encamina hacia el combustible.
Si conduzco hasta aquí y le doy a la barra espaciadora, me doy la vuelta y encaro el combustible así.
Bien, fantástico.
Funciona muy bien.
Así que aunque Unity tiene estos métodos que hacen esto automáticamente por ti, si alguna vez te encuentras
en un caso en el que no tienes esos métodos disponibles para ti o algo no está funcionando
exactamente bien, al menos ahora tienes como los fundamentos subyacentes de estos cálculos y ahora sabes lo que el producto
punto y el producto cruz son y cómo son muy, muy útiles en los juegos y yo especialmente con la navegación.