2011-02-07 20 views
7

Dado un valor de cuaternión, me gustaría encontrar su vecino más cercano en un conjunto de cuaterniones. Para hacer esto, claramente necesito una forma de comparar la "distancia" entre dos cuaterniones. ¿Qué distancia de representación se necesita para tal comparación y cómo se calcula?Vecinos más cercanos utilizando Quaternions

Gracias,

Josh

Respuesta

5

Está su cuaternión sólo un punto en 3D espacio con una orientación?

Entonces la distancia entre dos cuaterniones x1,y1,z1,w1 y x2,y2,x2,w2 viene dada por:

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2), suponiendo que el componente w se utiliza para la orientación. Es decir. esto es lo mismo que la distancia entre dos puntos 3D.

¿Es su quaternion un punto en el espacio 4D?

Entonces la distancia entre ellos se da por:

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1-w2)^2).

Que es solo la extensión del espacio 4D. Esta fórmula euclidean distance funciona en cualquier cantidad de dimensiones.

+0

Gracias por la respuesta. Los cuaterniones se representan como un punto en el espacio 4D. He usado la distancia euclidiana según lo sugerido, y proporciona resultados razonables. – Josh

+0

Encontró un paréntesis adicional en su 2da fórmula allí, pero no puede hacer una edición ya que es menos de 6 caracteres. Debe ser 'distance = sqrt ((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1-w2)^2)'. Gracias por esta respuesta! – SCCOTTT

1

Esto realmente depende de lo que se utiliza para los cuaterniones. Una simple medida de distancia sería el valor absoluto de su diferencia.

Si x = a + bi + cj + dk y = e + Fi + GJ + hk

que la distancia euclídea sería

|x-y| = sqrt((a-e)² + (b-f)² + (c-g)² + (d-h)²) 
9

Esta es una vieja pregunta, pero parecía necesitar un poco más de respuesta. Si los cuaterniones son cuaterniones de longitud de unidad que se utilizan para representar rotaciones, la distancia euclidiana dará algunos resultados divertidos porque los cuaterniones proporcionan una representación duplicada del espacio de rotación; es decir, un cuaternión y su negación representan la misma orientación. En este caso, la distancia métrica correcta es el ángulo entre el cuaterniones, obligado a caer dentro de [0,pi/2]:

theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z); 
if (theta>pi/2) theta = pi - theta; 
0

Si "distancia" que significa la rotación del arco más corta entre 2 orientaciones, que la simple distancia euclidiana está bien (L2 o norm2).

porque el ángulo entre las orientaciones se puede escribir como

theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z); 

Than, cuanto más grande es L2, la distancia más grande.

NOTA: todos los cuaterniones antes de la consulta deben ser negados si proporcionan un producto de puntos negativos. Entonces puedes usar la coincidencia KNN usual para acelerar tus consultas.

Cuestiones relacionadas