Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

times, .*

Multiplicación de cuaterniones por elementos

Desde R2019b

Sintaxis

Descripción

ejemplo

quatC = A.*B devuelve la multiplicación de cuaterniones elemento por elemento de arreglos de cuaterniones.

Puedes usar la multiplicación de cuaterniones para componer operadores de rotación:

  • Para componer una secuencia de rotaciones de cuadros, multiplique los cuaterniones en el mismo orden que la secuencia de rotaciones deseada. Por ejemplo, para aplicar un cuaternión p seguido de un cuaternión q , multiplique en el orden pq. El operador de rotación se convierte en (pq)v(pq), donde v representa el objeto a rotar en forma de cuaternión. * representa la conjugación.

  • Para componer una secuencia de rotaciones de puntos, multiplique los cuaterniones en el orden inverso a la secuencia de rotaciones deseada. Por ejemplo, para aplicar un cuaternión p seguido de un cuaternión q , multiplique en orden inverso, qp. El operador de rotación se convierte en (qp)v(qp).

Ejemplos

contraer todo

Crea dos vectores, A y B, y multiplícalos elemento por elemento.

A = quaternion([1:4;5:8]);
B = A;
C = A.*B
C = 2x1 quaternion array
     -28 +   4i +   6j +   8k
    -124 +  60i +  70j +  80k

Cree dos arreglos de 3 por 3, A y B y multiplíquelas elemento por elemento.

A = reshape(quaternion(randn(9,4)),3,3);
B = reshape(quaternion(randn(9,4)),3,3);
C = A.*B
C = 3x3 quaternion array
     0.60169 +  2.4332i -  2.5844j + 0.51646k    -0.49513 +  1.1722i +  4.4401j -   1.217k      2.3126 + 0.16856i +  1.0474j -  1.0921k
     -4.2329 +  2.4547i +  3.7768j + 0.77484k    -0.65232 - 0.43112i -  1.4645j - 0.90073k     -1.8897 - 0.99593i +  3.8331j + 0.12013k
     -4.4159 +  2.1926i +  1.9037j -  4.0303k     -2.0232 +  0.4205i - 0.17288j +  3.8529k     -2.9137 -  5.5239i -  1.3676j +  3.0654k

Tenga en cuenta que la multiplicación de cuaterniones no es conmutativa:

isequal(C,B.*A)
ans = logical
   0

Cree un vector fila a y un vector columna b, luego multiplíquelos. El vector fila de 1 por 3 y el vector columna de 4 por 1 se combinan para producir una matriz de 4 por 3 con todas las combinaciones de elementos multiplicadas.

a = [zeros("quaternion"),ones("quaternion"),quaternion(randn(1,4))]
a = 1x3 quaternion array
           0 +       0i +       0j +       0k           1 +       0i +       0j +       0k     0.53767 +  1.8339i -  2.2588j + 0.86217k

b = quaternion(randn(4,4))
b = 4x1 quaternion array
      0.31877 +   3.5784i +   0.7254j -  0.12414k
      -1.3077 +   2.7694i - 0.063055j +   1.4897k
     -0.43359 -   1.3499i +  0.71474j +    1.409k
      0.34262 +   3.0349i -  0.20497j +   1.4172k

a.*b
ans = 4x3 quaternion array
            0 +        0i +        0j +        0k      0.31877 +   3.5784i +   0.7254j -  0.12414k      -4.6454 +   2.1636i +   2.9828j +   9.6214k
            0 +        0i +        0j +        0k      -1.3077 +   2.7694i - 0.063055j +   1.4897k      -7.2087 -   4.2197i +   2.5758j +   5.8136k
            0 +        0i +        0j +        0k     -0.43359 -   1.3499i +  0.71474j +    1.409k       2.6421 -     5.32i -   2.3841j -   1.3547k
            0 +        0i +        0j +        0k      0.34262 +   3.0349i -  0.20497j +   1.4172k      -7.0663 -  0.76439i -  0.86648j +   7.5369k

Argumentos de entrada

contraer todo

Entrada para multiplicar, especificada como un objeto quaternion , un arreglo de objetos quaternion de cualquier dimensionalidad, un escalar real o un arreglo de números reales de cualquier dimensionalidad. Los valores numéricos deben ser del tipo de datos single o double.

A y B deben tener tamaños compatibles. En los casos más simples, pueden ser del mismo tamaño o uno puede ser escalar. Dos entradas tienen tamaños compatibles si, para cada dimensión, los tamaños de las dimensiones de las entradas son los mismos o uno de ellos es 1.

Entrada para multiplicar, especificada como un objeto quaternion , un arreglo de objetos quaternion de cualquier dimensionalidad, un escalar real o un arreglo de números reales de cualquier dimensionalidad. Los valores numéricos deben ser del tipo de datos single o double.

A y B deben tener tamaños compatibles. En los casos más simples, pueden ser del mismo tamaño o uno puede ser escalar. Dos entradas tienen tamaños compatibles si, para cada dimensión, los tamaños de las dimensiones de las entradas son los mismos o uno de ellos es 1.

Argumentos de salida

contraer todo

Producto Quaternion, devuelto como un objeto quaternion o un arreglo de objetos quaternion .

Algoritmos

contraer todo

Multiplicación de cuaterniones por un escalar real

Dado un cuaternión,

q=aq+bqi+cqj+dqk,

el producto de q y un escalar real β es

βq=βaq+βbqi+βcqj+βdqk

Multiplicación de cuaterniones por un escalar de cuaterniones

La definición de los elementos básicos de los cuaterniones,

i2=j2=k2=ijk=-1,

se puede ampliar para completar una tabla que resuma la multiplicación de elementos básicos de cuaterniones:

 1"i"jk
11ijk
"i"i-1k−j
jj−k-1i
kkj−yo-1

Al leer la tabla, se leen primero las filas, por ejemplo: ij = k y ji = −k.

Dados dos cuaterniones, q=aq+bqi+cqj+dqk, y p=ap+bpi+cpj+dpk, la multiplicación se puede expandir como:

z=pq=(ap+bpi+cpj+dpk)(aq+bqi+cqj+dqk)=apaq+apbqi+apcqj+apdqk+bpaqi+bpbqi2+bpcqij+bpdqik+cpaqj+cpbqji+cpcqj2+cpdqjk+dpaqk+dpbqki+dpcqkj+dpdqk2

Puedes simplificar la ecuación usando la tabla de multiplicar de cuaterniones.

z=pq=apaq+apbqi+apcqj+apdqk+bpaqibpbq+bpcqkbpdqj+cpaqjcpbqkcpcq+cpdqi+dpaqk+dpbqjdpcqidpdq

Referencias

[1] Kuipers, Jack B. Quaternions and Rotation Sequences: A Primer with Applications to Orbits, Aerospace, and Virtual Reality. Princeton, NJ: Princeton University Press, 2007.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2019b