Contenido principal

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

interp1

Interpolación de cuaterniones (búsqueda en la tabla)

Desde R2025a

    Descripción

    vq = interp1(x,v,xq) interpola los valores de cuaterniones de una función 1-D en puntos de consulta específicos utilizando interpolación lineal esférica (SLERP). x especifica los puntos de muestra y v especifica los cuaterniones que contienen los valores correspondientes v(x). xq especifica los puntos de consulta. De forma predeterminada, la función utiliza el método de interpolación "slerp-short".

    ejemplo

    vq = interp1(x,v,xq,method) especifica el método de interpolación.

    ejemplo

    vq = interp1(x,v,xq,method,extrapolation) especifica un valor de cuaternión que se devolverá para todos los puntos de consulta en xq que estén fuera del dominio de x.

    ejemplo

    vq = interp1(v,xq) interpola los valores de cuaternión asumiendo un conjunto predeterminado de puntos de muestra. Los puntos predeterminados son la secuencia de números del 1 al n, donde n depende de la forma de v:

    • Cuando v es un vector de cuaterniones, los puntos predeterminados son 1:length(v).

    • Cuando v es un arreglo de cuaterniones, los puntos predeterminados son 1:size(v,1).

    Utilice esta sintaxis cuando no le preocupen las distancias absolutas entre los puntos de muestra.

    ejemplo

    vq = interp1(v,xq,method) especifica el método de interpolación y utiliza los puntos de muestra predeterminados.

    vq = interp1(v,xq,method,extrapolation) especifica un valor de extrapolación y utiliza los puntos de muestra predeterminados.

    Ejemplos

    contraer todo

    Define los puntos de muestra x y los valores de muestra correspondientes v.

    x = [1 2 5 6];
    eul = [-185:45:-50; -20*ones(1,4); zeros(1,4)]';
    v = quaternion(eul,"eulerd","ZYX","frame");

    Define los puntos de consulta en el rango de x.

    xq = [1.5 3 4 5.4];

    Interpolar en los puntos de consulta.

    vq = interp1(x,v,xq);

    Para visualizar el resultado, gire el mismo punto utilizando la muestra y los cuaterniones interpolados.

    pts_samples = rotatepoint(v,[1.05 0 0]);
    pts_query = rotatepoint(vq,[1.05 0 0]);

    Grafique una esfera unitaria y luego grafique los cuaterniones de muestra e interpolados en la esfera.

    figure
    [X,Y,Z] = sphere;
    surf(X,Y,Z,FaceAlpha=0.5,EdgeAlpha=0.35)
    colormap gray
    hold on
    scatter3(pts_samples(:,1),pts_samples(:,2),pts_samples(:,3),"filled")
    scatter3(pts_query(:,1),pts_query(:,2),pts_query(:,3),"filled")
    exampleHelperAnnotateQuats(pts_samples,pts_query,x,xq,10,1.05)
    axis equal
    title(["Interpolated Quaternions Visualized","Using Rotated Points"])
    legend("","Sample Quaternions (v)","Interpolated Quaternions (vq)")

    Figure contains an axes object. The axes object with title Interpolated Quaternions Visualized Using Rotated Points contains 11 objects of type surface, scatter, text. These objects represent Sample Quaternions (v), Interpolated Quaternions (vq).

    Definir un conjunto de valores de función.

    eul = [-170:20:-70; -20*sind(0:72:360)-25; zeros(1,6)]';
    v = quaternion(eul,"eulerd","ZYX","frame");

    Define un conjunto de puntos de consulta que se encuentran entre los puntos predeterminados, 1:6. En este caso, los puntos predeterminados son 1:6 porque v es una matriz de cuaterniones de seis elementos.

    xq = [1.5 2.6 3.5 4.5 5.5];

    Evalúa v en xq utilizando el método de interpolación natural SQUAD. Tenga en cuenta que aquí puede utilizar el método de interpolación predeterminado "slerp-short", pero para la rotación de onda sinusoidal que describe esta función de cuaternión, SQUAD produce una ruta interpolada más suave.

    vq = interp1(v,xq,"squad-natural");

    Para visualizar el resultado, gire un punto en el eje x utilizando los cuaterniones de muestra e interpolados.

    pts_samples = rotatepoint(v,[1.05 0 0]); 
    pts_query = rotatepoint(vq,[1.05 0 0]);

    Grafique una esfera unitaria y luego grafique los cuaterniones de muestra e interpolados en la esfera.

    figure
    [X,Y,Z] = sphere;
    surf(X,Y,Z,FaceAlpha=0.5,EdgeAlpha=0.35)
    colormap gray
    hold on
    scatter3(pts_samples(:,1),pts_samples(:,2),pts_samples(:,3),"filled")
    scatter3(pts_query(:,1),pts_query(:,2),pts_query(:,3),"filled")
    exampleHelperAnnotateQuats(pts_samples,pts_query,1:6,xq,9,1.05)
    axis equal
    title(["Interpolated Quaternions Visualized","Using Rotated Points"])
    legend("","Sample Quaternions (v)","Interpolated Quaternions (vq)")

    Figure contains an axes object. The axes object with title Interpolated Quaternions Visualized Using Rotated Points contains 14 objects of type surface, scatter, text. These objects represent Sample Quaternions (v), Interpolated Quaternions (vq).

    Define tres cuaterniones que representan diferentes orientaciones.

    q0 = quaternion([0 0 0],"euler","ZYX","frame");
    q1 = quaternion([pi/4 pi/6 pi/3],"euler","ZYX","frame");
    q2 = quaternion([pi/2 pi/4 pi/2],"euler","ZYX","frame");

    Crea un vector de tiempo para los fotogramas clave originales

    x = [1 2 3];

    Crear un vector de tiempo para la interpolación

    T = linspace(0,3,300);

    Interpolar utilizando interp1 con los métodos "slerp-natural" y "squad-natural".

    quats_slerp = interp1(x,[q0 q1 q2],T,"slerp-natural")';
    quats_squad = interp1(x,[q0 q1 q2],T,"squad-natural")';

    Calcule las velocidades angulares para ambos métodos de interpolación.

    ang_vel_slerp = angvel(quats_slerp,T(2)-T(1),"frame");
    ang_vel_squad = angvel(quats_squad,T(2)-T(1),"frame");

    Grafique las velocidades angulares.

    tl = tiledlayout(2,1);
    title(tl,"Angular Velocity - SLERP vs SQUAD")

    Grafique las velocidades angulares para las interpolaciones SLERP y SQUAD. Tenga en cuenta que la velocidad angular de la interpolación SQUAD es más suave que la interpolación que utiliza SLERP.

    nexttile
    plot(T,ang_vel_slerp)
    ylim padded
    title("SLERP Natural")
    legend("X","Y","Z")
    nexttile
    plot(T,ang_vel_squad)
    ylim padded
    title("SQUAD Natural")
    xlabel(tl,"Time")
    ylabel(tl,"Angular Velocity (rad/s)")

    Figure contains 2 axes objects. Axes object 1 with title SLERP Natural contains 3 objects of type line. These objects represent X, Y, Z. Axes object 2 with title SQUAD Natural contains 3 objects of type line.

    Define los puntos de muestra x y los valores de muestra correspondientes v.

    x = [0 1 2];
    eul = [0 30 60; 0 20 60; zeros(1,3)]';
    v = quaternion(eul,"eulerd","ZYX","frame");

    Especifique los puntos de consulta xq para que se extiendan más allá del dominio de x.

    xq = [-0.5 0.5 1.5 2.5];

    Ahora evalúa v en xq usando el método de interpolación "slerp-short" y asigna cualquier valor fuera del dominio de x a un cuaternión con todas las partes establecidas en 0.

    vq = interp1(x,v,xq,"slerp-short",ones("quaternion"))'
    vq = 4×1 quaternion array
                1 +        0i +        0j +        0k
          0.98774 + 0.022751i - 0.084907j -  0.12903k
          0.87097 +    0.151i -  0.30755j -  0.35217k
                1 +        0i +        0j +        0k
    
    

    Argumentos de entrada

    contraer todo

    Puntos de muestra, especificados como un vector de elementos N de números reales. x debe contener al menos dos puntos de muestra y los valores en x deben ser distintos. La longitud de x depende de la forma de v.

    • Si v es un vector de cuaterniones, entonces length(x) debe ser igual a length(v).

    • Si v es una matriz de cuaterniones, entonces length(x) debe ser igual a size(v,1).

    Ejemplo: [1 2 3 4 5 6 7 8 9 10]

    Ejemplo: 1:10

    Ejemplo: [3 7 11 15 19 23 27 31]'

    Cuaterniones de muestra, especificados como un vector de elementos N de objetos quaternion o una matriz de objetos de cuaternión.

    Si tiene varios conjuntos de datos que se muestrean en los mismos puntos de consulta, puede especificar v como una matriz. Cada columna de la matriz debe contener un conjunto diferente de valores de muestra 1-D y la primera dimensión debe tener una longitud N, donde N es el número de puntos de muestra especificados x.

    Puntos de consulta, especificados como un escalar, un vector, una matriz o una matriz de números reales.

    Ejemplo: 5

    Ejemplo: 1:0.05:10

    Ejemplo: (1:0.05:10)'

    Ejemplo: [0 1 2 7.5 10]

    Método de interpolación, especificado como una de las opciones en esta tabla:

    MethodDescripciónContinuidadComentarios
    "slerp-short"

    Interpolación lineal esférica entre cuaterniones de muestra mediante un coeficiente de interpolación, eligiendo la ruta de interpolación más corta entre los cuaterniones de muestra.

    Tenga en cuenta que, en cada punto de muestra, los cuaterniones de entrada y salida podrían invertirse para garantizar la ruta más corta.

    Para obtener más información sobre el algoritmo SLERP, consulte Algoritmo SLERP.

    C0
    • Requiere al menos 2 cuaterniones de muestra

    • Requisitos de memoria bajos

    • Tiempo de cálculo eficiente

    • Garantiza la interpolación de la ruta más corta.

    • Tiempo de cálculo más rápido

    "slerp-natural"

    Interpolación lineal esférica entre cuaterniones de muestra mediante un coeficiente de interpolación, eligiendo la ruta de interpolación natural entre los cuaterniones de muestra.

    Los cuaterniones de entrada y salida tendrán el mismo signo en los puntos de muestra.

    Para obtener más información sobre el algoritmo SLERP, consulte Algoritmo SLERP.

    C0
    • Requiere al menos 2 cuaterniones de muestra

    • Requisitos de memoria bajos

    • Tiempo de cálculo eficiente

    • Los cuaterniones de entrada y salida tendrán el mismo signo en los puntos de muestra.

    "squad-natural"

    Interpolación cuadrángulo esférico entre cuaterniones de muestra, proporcionando transiciones suaves y continuas con cambios graduales en la aceleración.

    Los cuaterniones de entrada y salida tendrán el mismo signo en los puntos de muestra.

    Para obtener más información sobre el algoritmo SQUAD, consulte Algoritmo SQUAD.

    C1
    • Requiere al menos 2 cuaterniones de muestra

    • Requisitos de memoria moderados

    • Tiempo de cálculo eficiente

    • Garantiza transiciones suaves y cambios de aceleración graduales.

    "nearest"Interpolación del vecino más cercano. El valor interpolado en un punto de consulta es el valor del cuaternión de muestra más cercano.Discontinuo
    • Requiere al menos 2 cuaterniones de muestra

    • Requisitos de memoria modestos

    "next"Interpolación del próximo vecino. El valor interpolado en un punto de consulta es el valor del siguiente cuaternión de muestra.Discontinuo
    • Requiere al menos 2 cuaterniones de muestra.

    • Los mismos requisitos de memoria y tiempo de cálculo que "nearest"

    "previous"Interpolación de vecino anterior. El valor interpolado en un punto de consulta es el valor del cuaternión de muestra anterior.Discontinuo
    • Requiere al menos 2 cuaterniones de muestra.

    • Los mismos requisitos de memoria y tiempo de cálculo que "nearest"

    Cuaternión de extrapolación, especificado como un objeto quaternion. interp1 devuelve este cuaternión para cualquier valor xq que consulte fuera del dominio de x.

    Ejemplo: interp1([0 1 2],quats,2.5,"slerp-natural") devuelve un cuaternión de valor NaN + NaNi + NaNj + NaNk.

    Ejemplo: interp1([0 1 2],quats,2.5,"slerp-natural",zeros("quaternion")) devuelve un cuaternión de valor 0 + 0i + 0j + 0k.

    Argumentos de salida

    contraer todo

    Valores interpolados, devueltos como escalar, vector, matriz o arreglo. El tamaño de vq depende de las formas de v y xq.

    Forma de vForma de xqTamaño de vqEjemplo
    VectorVectorsize(xq)Si size(v) = [1 100]
    y size(xq) = [1 500],
    entonces size(vq) = [1 500].
    VectorMatriz
    o matriz N-D
    size(xq)Si size(v) = [1 100]
    y size(xq) = [50 30],
    entonces size(vq) = [50 30].
    FormaciónVector[length(xq) size(v,2),...,size(v,n)]Si size(v) = [100 3]
    y size(xq) = [1 500],
    entonces size(vq) = [500 3].
    FormaciónMatriz
    o matriz N-D
    [size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)]Si size(v) = [4 5 6]
    y size(xq) = [2 3 7],
    entonces size(vq) = [2 3 7 5 6].

    Algoritmos

    contraer todo

    Referencias

    [1] Shoemake, Ken. "Animating Rotation with Quaternion Curves." ACM SIGGRAPH Computer Graphics 19, no. 3 (July 1985): 245–54. https://doi.org/10.1145/325165.325242.

    [2] Dam, Erik B., Martin Koch, and Martin Lillholm. Quaternions, Interpolation and Animation. Technical Report DIKU-TR-98/5. Department of Computer Science, University of Copenhagen, July 17, 1998. https://web.mit.edu/2.998/www/QuaternionReport1.pdf.

    Capacidades ampliadas

    expandir todo

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

    Historial de versiones

    Introducido en R2025a

    Consulte también

    |