Rotaciones y orientaciones con cuaternios unitarios

Los cuaternios se representan en esta biblioteca como vectores de 3 elementos correspondientes con la parte vectorial de cuaternios. Como los cuaternios para rotaciones tienen norma unidad y representan la misma transformación que su opuesto, la parte escalar del cuaternio se asume positiva y no se almacena. En todos los cálculos, si un cuaternio resultante tiene parte escalar negativa, se almacena la parte vectorial opuesta. Así, la parte escalar siempre puede deducirse de la parte vectorial, aunque con precisión limitada. Así pues, el cuaternio conjugado, se obtiene simplemente con la tecla +/-.

Etiqueta

La etiqueta Q es la inicial de cuaternio en inglés. Además, la etiqueta eQN está formado por las letras primera y última de cuaternio en inglés.

Detalle de funciones

Dirección Nombre
Q002 HELP
Q003 Q([Y],θx)
Q004 ANGLE(Q)
Q005 SLERP ZY
Q006 APPLY Q→y
Q007 Qy∘Qx

Q000
Q001
Q002 HELP

Muestra la lista de funciones y sus direcciones.

Q003 Q([Y],θx)

Crea un cuaternio en el formato interno de la biblioteca a partir de un par de rotación vector-ángulo. En el registro Y se debe colocar un vector con la dirección del cuaternio deseado y en X se debe poner el ángulo de giro de la rotación. La pila RPN desciende una vez, el cuaternio se coloca en X y el vector normalizado se coloca en LASTx.

Registro Antes Después
T t t
Z z t
Y [v] z
X θ Q
L l [v]/|[v]|

Q004 ANGLE(Q)

Extrae el ángulo representado por el cuaternio en X, que se coloca en LASTx. Para obtener la parte escalar del cuaternio, se deberá aplicar el coseno a este ángulo dividido entre dos.

Registro Antes Después
T t t
Z z z
Y y y
X Q θ
L l Q

Q005 SLERP (Z,Y,x)

Interpolación lineal esférica, con el primer cuaternio en Z, el segundo en Y y el parámetro 0<tₛ<1 en X.

Registro Antes Después
T t t
Z Qz Qz
Y Qy Qy
X tₛ Qz∘(Qz⁻¹∘Qy)ᵗₛ
L l tₛ

Q006 APPLY Q→y

Calcula el valor del vector Y tras rotarlo según el cuaternio en X, que se coloca en LASTx después de la operación: x=Q∘y∘conj(Q)

La columna ‘durante’ indica el contenido de los registros durante la ejecución de la ecuación que calcula el vector rotado.

Registro Antes Después Durante
T t t qw
Z z t Qw
Y [y] z P
X Q Q∘[0,y]∘Q P×Q
L l Q Q

Q007 Qy∘Qx

Composición de los cuaternios de rotación situados en Y y en X.

Registro Antes Después
T t t
Z z z
Y Qy y
X Qx Qy∘Qx
L l Qx

Código fuente

Q001 LBL Q
Q002 GTO Q010
Q003 GTO Q022
Q004 GTO Q017
Q005 GTO Q070
Q006 GTO Q055
Q007 GTO Q042
  HELP:
Q008 SF 10
Q009 HELP QUATERNNS
Q010 PSE
Q011 Q003 Q([Y],θx)
Q012 Q004 θ
Q013 Q005 SLERP ZYᵗ         :Esta t está en constants>>>atm
Q014 Q006 APPLY Q→y
Q015 Q007 Qy∘Qx
Q016 RTN
  ANGLE(Q):
Q017 ABS
Q018 R↓
Q019 CF 10
Q020 2×ASIN(REGT)
Q021 RTN
  Q([Y],θx):
Q022 R↑
Q023 XEQ J007
Q024 2
Q025 ÷
Q026 SIN
Q027 LASTx
Q028 COS
Q029 SGN
Q030 x<>y
Q031 ×
Q032 x=0?
Q033 XEQ J003
Q034 x<>y
Q035 ENTER
Q036 ABS
Q037 ÷
Q038 XEQ J004
Q039 R↓
Q040 ×
Q041 RTN
  Qy∘Qx:
Q042 R↓
Q043 R↓
Q044 XEQ J007
Q045 XEQ J007
Q046 XEQ P004
Q047 COS(ASIN(ABS(REGY)))
Q048 COS(ASIN(ABS(LASTx)))
Q049 SGN(REGY×REGX-REGT×LASTx)×(REGZ+REGY×LASTx+REGX×REGT)
Q050 XEQ J004
Q051 ENTER
Q052 XEQ J004
Q053 R↑
Q054 RTN
  APPLY Q→y:
Q055 R↓
Q056 R↓
Q057 XEQ J007
Q058 XEQ J007
Q059 ENTER
Q060 R↓
Q061 COS(ASIN(ABS(REGT)))
Q062 R↓
Q063 XEQ P004
Q064 2×(REGY×LASTx)×LASTx-2×REGT×REGX+(2×SQ(REGT)-1)×REGY
Q065 XEQ J004
Q066 ENTER
Q067 XEQ J004
Q068 R↑
Q069 RTN
  SLERP (Z,Y,x):
Q070 R↑
Q071 XEQ J007
Q072 ACOS(SQRT((1-SQ(ABS(REGZ)))×(1-SQ(ABS(REGY))))+REGZ×REGY)
Q073 R↓
Q074 (SIN((1-REGX)×REGT)×REGZ+SIN(REGX×REGT)×REGY)÷SIN(REGT)
Q075 x<>y
Q076 ABS
Q077 R↓
Q078 XEQ J004
Q079 R↓
Q080 RTN


Longitud             610