Escribo una aplicación de iPhone basada en OpenGL y me gustaría permitir que un usuario traduzca alrededor de una vista según la dirección en que muevan dos dedos en la pantalla. Por un dedo sé que podría simplemente calcular el vector desde la posición de inicio hasta la posición actual del dedo del usuario y luego encontrar el vector unitario de este para obtener solo la dirección, pero no sé cómo haría esto por dos dedos, no creo que agregar los componentes de los vectores y calcular el promedio funcionaría, así que estoy bastante atascado.Cómo calculo la dirección promedio de dos vectores
Respuesta
matemáticas vectoriales funciona igual que usted piensa:
v3 = (v1 + v2)/2
// so:
v3.x = (v1.x + v2.x)/2;
// same for Y and Z
agregarlos y dividiendo por dos Cómo funciona la
Fácil experimento mental: Hágalo por vectores unitarios en dirección X e Y. Intuitivamente, puede imaginarse que el "promedio" sería un vector unitario en un ángulo de 45 grados hacia arriba y hacia la derecha. Eso es exactamente lo que sucede. El experimento mental sugiere que necesita normalizar el promedio en su magnitud para obtener un vector unitario. Te aconsejo que lo hagas.
Si usted está interesado sólo en la dirección, debe añadirlos y normalizar el vector resultado,
(v1 + v2)/abs(v1 + v2)
Por lo general, es mejor para multiplicar de dividir por razones de velocidad cuando se hace la programación gráfica, así que recomiendo este :
v3 = (v1 + v2) * 0.5f;
¿Esto no sería optimizado por el compilador, entonces '/ 2.0' es lo mismo que' * 0.5'? –
Sí, debería, al menos según mi experiencia con compiladores típicos de C. Es otra historia si tienes una variable que es constante, digamos un ciclo más largo en el que divides algo por ella. Entonces puedo medir las diferencias si calcula una nueva variable (la inversa) y se multiplica en el ciclo. Sin embargo, la optimización de los compiladores mejora bastante rápidamente. – oli
Lo siento, pero esto es incorrecto. En el mundo de vectores, una "media" en el sentido de promediar componentes no significa nada. Imagine (-1 0) y (1 0) -> average = 0 0 ;-)
no es tan fácil como podría parecer: tiene que usar slerp-interpolation para encontrar el medio arco en la esfera de la unidad: http://en.wikipedia.org/wiki/Slerp En profundidad aquí: http://www.essentialmath.com/index.htm
Técnicamente sí, pero para los vectores unitarios, Slerp con pesos iguales se reduce a una media simple + normalización. –
Para comprender de manera intuitiva, se puede dibujar los dos vectores hacia abajo. Luego dibuja un segmento de línea entre los puntos finales de los dos. El punto medio de este segmento es el vector promedio. Esto funciona para cualquier cantidad de dimensiones.
- 1. ¿Cómo calculo la similitud del coseno de dos vectores?
- 2. ¿Cómo calculo la similitud de dos enteros?
- 3. ¿Calcula el ángulo de dirección desde dos vectores?
- 4. ¿Cómo calculo el ancho entre dos elementos?
- 5. ¿Cómo calculo la diferencia de dos medidas de ángulo?
- 6. promedio móvil de dos caras?
- 7. C++: Comparando dos vectores
- 8. "mover" dos vectores juntos
- 9. Comparar dos vectores C++
- 10. "Bloqueando" dos vectores y ordenándolos
- 11. ¿Cómo calculo la entropía de un gráfico?
- 12. ¿Cómo calculo un centroide 3D?
- 13. Rellene la matriz numpy de la diferencia de dos vectores
- 14. Promedio de dos ángulos con envoltura alrededor
- 15. ¿Cómo calculo los valores promedio en objetos ubicados en una matriz?
- 16. ¿Cómo calculo la potencia de C#?
- 17. Calculando la distancia de Hamming para dos vectores en R?
- 18. Obteniendo quaternion para rotar entre dos vectores
- 19. ¿Cómo especifico en qué dirección redondear el promedio de dos flotantes que difieren según el LSB de su significado?
- 20. ¿Cómo combino dos vectores de diferente longitud en I
- 21. Comprueba si dos vectores son iguales
- 22. ¿Cómo agregar elemento por elemento de dos vectores STL?
- 23. Calcular la distancia entre dos vectores de diferente longitud
- 24. ¿Cuál es la mejor manera de concatenar dos vectores?
- 25. Cómo saber la dirección de dos puntos geo
- 26. Comparando dos vectores en una declaración if
- 27. Alternar, entrelazar o entrelazar dos vectores
- 28. ¿Ángulo entre dos vectores 2d, diferencia entre dos métodos?
- 29. ¿Cómo calculo programáticamente las probabilidades de poker?
- 30. ¿Cómo calculo la distancia entre dos puntos de latitud y longitud?
División por cero! –
let v1! = V2 ... – RickyA
si solo está interesado en la dirección, las v1 y v2 se deben normalizar primero. – pikaille