1 votos

Dibujo epicicloidal 3D de una curva espacial mediante una transformada de Fourier de cuaterniones

Hace poco me encontré con la hermosa representación matemática de la serie de Fourier como una serie de vectores giratorios que trazan epiciclos que pueden utilizarse para aproximar cualquier curva 2D cerrada. Mi comprensión de este tema y de otros que trato aquí (como los cuaterniones) proviene de algunas fuentes que encontré en Internet, a las que me remito al final de esta descripción. Primero explicaré mi pensamiento y luego presentaré mi pregunta al final.

Después de aprender sobre los dibujos epicicloidales en 2D, traté de pensar en cómo extender esto a las 3 dimensiones. Mi idea actual es que el resultado final sería algo así:

                                     enter image description here

La idea es acabar con una serie de vectores (representados como flechas negras rectas en la imagen) que giran cada uno sobre su propio eje designado (representado como líneas de puntos marrones) en el sentido de las agujas del reloj o en sentido contrario para trazar círculos en el espacio (la dirección de la rotación está representada por las pequeñas puntas de flecha en los círculos grises). Si se suman los vectores de cabeza a cola y se traza la suma de los vectores a lo largo del tiempo, se obtendrá la curva espacial deseada.

Después de pensar un poco, me di cuenta de que hay tres formas en que estos vectores pueden sumarse entre sí:

  1. Todo de forma independiente de tal manera que la rotación de un vector no tiene ningún efecto sobre las orientaciones de los ejes de rotación de los vectores siguientes. Esto permitiría añadir los vectores en cualquier orden sin afectar a la curva final dibujada, ya que no hay composición de rotaciones 3D de la que hablar.
  2. Todo depende de tal manera que la rotación de un vector hace que el eje de rotación del siguiente vector también gire alrededor del eje de ese primer vector. Dado que las rotaciones en tres dimensiones no son conmutativas, el orden de los vectores importa aquí. Además, incluso si un vector tiene una magnitud de cero pero todavía tiene un eje de rotación asignado y una frecuencia de rotación distinta de cero, esa rotación seguirá afectando a la rotación de los vectores siguientes.
  3. Algunos de forma independiente y otros de forma dependiente. Algunos vectores de la cadena no afectarían a los ejes de rotación de los vectores siguientes, mientras que otros sí. Que el orden de los vectores añadidos sea importante o no depende de la sección de la cadena que nos interese.

Además de esta complejidad en la forma de sumar los vectores, ya no podemos utilizar números imaginarios para describirlos como habríamos podido hacer en el caso 2D. En su lugar, utilizaríamos los cuaterniones como una extensión 4D de los números imaginarios.

Podemos tomar cualquier curva parametrizada del espacio 3D y escribirla como una función de cuaterniones q(t) donde: q(t) = 0 + x(t) i + y(t) j + z(t) k .

Si q(t) puede aproximarse como una suma discreta de vectores de cuaterniones que se rotan en el espacio tridimensional como se visualiza en mi figura anterior, teóricamente debería haber una forma de calcular una transformada de Fourier de cuaterniones discreta que nos permitiera deconstruir la curva en esos vectores.

Ya he empezado a pensar en formas de hacer esto que no he probado ni comprobado, pero para que esta descripción no se alargue mucho más, me lanzaré directamente a la pregunta:

Mi pregunta es triple : ¿Cómo se calcula esta propuesta de transformada de fourier de cuaterniones discretos? ¿Cuál de las tres formas de sumar los vectores sería la más idónea (de forma independiente, dependiente o una mezcla de ambas)? Además, ¿sería considerablemente más caro computacionalmente que el caso 2d?

Recursos que han informado mi pensamiento (principalmente del canal de Youtube 3Blue1Brown):

  1. Series de Fourier y dibujos de epiciclos: https://www.youtube.com/watch?v=r6sGWTCMz2k
  2. Transformada de Fourier: https://www.youtube.com/watch?v=spUNpyF58BY
  3. Cuaterniones y rotaciones 3D: https://www.youtube.com/watch?v=d4EgbgTm0Bg , https://www.youtube.com/watch?v=zjMuIxRvygQ , https://eater.net/quaternions

2voto

Kevin Puntos 11

Se puede hacer una serie de Fourier de cada elemento de una curva paramétrica cerrada multidimensional $\vec{f}(t) = (f_1(t),f_2(t),\cdots,f_N(t))\in\mathbb{R}^N$ con

$$ f_i(t) = \sum_{k=0}^\infty a_{i,k} \sin(k\,\omega\,t) + b_{i,k} \cos(k\,\omega\,t). \tag{1} $$

La contribución de cada frecuencia $k\,\omega$ a $\vec{f}(t)$ puede escribirse como

$$ \vec{f}_k(t) = \begin{bmatrix} a_{1,k} & b_{1,k} \\ a_{2,k} & b_{2,k} \\ \vdots & \vdots \\ a_{N,k} & b_{N,k} \end{bmatrix} \begin{bmatrix} \cos(k\,\omega\,t) \\ \sin(k\,\omega\,t) \end{bmatrix}, \tag{2} $$

tal que $\vec{f}(t) = \sum_{k=0}^\infty \vec{f}_k(t)$ . Se puede observar que cada $\vec{f}_k(t)$ forma una elipse en el plano espaciado por los vectores $\vec{a}_k = (a_{1,k},a_{2,k},\cdots,a_{N,k})$ y $\vec{b}_k = (b_{1,k},b_{2,k},\cdots,b_{N,k})$ . Esta elipse también se puede obtener sumando dos círculos que giran en sentido contrario mediante

$$ \vec{f}_k(t) = \alpha_k \begin{bmatrix} \vec{x}_k & \vec{y}_k \end{bmatrix} \begin{bmatrix} \cos(k\,\omega\,t + \varphi_k) \\ \sin(k\,\omega\,t + \varphi_k) \end{bmatrix} + \beta_k \begin{bmatrix} \vec{x}_k & \vec{y}_k \end{bmatrix} \begin{bmatrix} \cos(-k\,\omega\,t + \theta_k) \\ \sin(-k\,\omega\,t + \theta_k) \end{bmatrix}, \tag{3} $$

donde $\alpha_k,\beta_k\geq0$ son los radios de los círculos, $\{\vec{x}_k,\vec{y}_k\}$ forman una base ortonormal para $\{\vec{a}_k,\vec{b}_k\}$ y $\varphi_k,\theta_k\in\mathbb{R}$ representan el ángulo inicial de cada círculo con respecto a la base ortonormal utilizada. Por ejemplo $\{\vec{x}_k,\vec{y}_k\}$ puede obtenerse mediante el proceso de Gram-Schmidt

\begin{align} \vec{x}_k &= \frac{\vec{a}_k}{\|\vec{a}_k\|}, \\ \vec{y}_k &= \frac{\vec{b}_k - \big\langle\vec{x}_k , \vec{b}_k\big\rangle\,\vec{x}_k}{\|\vec{b}_k - \big\langle\vec{x}_k , \vec{b}_k\big\rangle\,\vec{x}_k\|}. \end{align}

Si $\|\vec{a}_k\|=0$ puedes intercambiar $\vec{a}_k$ con $\vec{b}_k$ (si ambos son cero, entonces todo el $\vec{f}_k(t)$ podría omitirse) y si $\|\vec{b}_k - \big\langle\vec{x}_k , \vec{b}_k\big\rangle\,\vec{x}_k\|=0$ se puede elegir cualquier vector que sea ortonormal a $\vec{x}_k$ (la contribución resultante de $\vec{y}_k$ es cero después de sumar los dos círculos).

Utilizando las siguientes identidades trigonométricas $\cos(x + \psi) = \cos(\psi)\cos(x) - \sin(\psi)\sin(x)$ y $\sin(x + \psi) = \sin(\psi)\cos(x) + \cos(\psi)\sin(x)$ $(3)$ también puede escribirse como

$$ \vec{f}_k(t) = \begin{bmatrix} \vec{x}_k & \vec{y}_k \end{bmatrix} \begin{bmatrix} \alpha_k \cos(\varphi_k) + \beta_k \cos(\theta_k) & \beta_k \sin(\theta_k) - \alpha_k \sin(\varphi_k) \\ \alpha_k \sin(\varphi_k) + \beta_k \sin(\theta_k) & \alpha_k \cos(\varphi_k) - \beta_k \cos(\theta_k) \end{bmatrix} \begin{bmatrix} \cos(k\,\omega\,t) \\ \sin(k\,\omega\,t) \end{bmatrix}. \tag{4} $$

Equiparación $(4)$ a $(2)$ permite que los términos que varían en el tiempo se tengan en cuenta. Combinando esto con el hecho de que $\{\vec{x}_k,\vec{y}_k\}$ son ortonormales se puede reescribir como

$$ \begin{bmatrix} \big\langle\vec{a}_k,\vec{x}_k\big\rangle \\ \big\langle\vec{a}_k,\vec{y}_k\big\rangle \\ \big\langle\vec{b}_k,\vec{x}_k\big\rangle \\ \big\langle\vec{b}_k,\vec{y}_k\big\rangle \end{bmatrix} = \begin{bmatrix} \alpha_k \cos(\varphi_k) + \beta_k \cos(\theta_k) \\ \alpha_k \sin(\varphi_k) + \beta_k \sin(\theta_k) \\ \beta_k \sin(\theta_k) - \alpha_k \sin(\varphi_k) \\ \alpha_k \cos(\varphi_k) - \beta_k \cos(\theta_k) \end{bmatrix}. \tag{5} $$

Resolver $(5)$ para $\alpha_k$ , $\beta_k$ , $\varphi_k$ y $\theta_k$ rinde

\begin{align} \alpha_k &= \frac{1}{2}\sqrt{ \left(\big\langle\vec{a}_k,\vec{x}_k\big\rangle + \big\langle\vec{b}_k,\vec{y}_k\big\rangle\right)^2 + \left(\big\langle\vec{a}_k,\vec{y}_k\big\rangle - \big\langle\vec{b}_k,\vec{x}_k\big\rangle\right)^2}, \tag{6a} \\ \beta_k &= \frac{1}{2}\sqrt{ \left(\big\langle\vec{a}_k,\vec{x}_k\big\rangle - \big\langle\vec{b}_k,\vec{y}_k\big\rangle\right)^2 + \left(\big\langle\vec{a}_k,\vec{y}_k\big\rangle + \big\langle\vec{b}_k,\vec{x}_k\big\rangle\right)^2}, \tag{6b} \\ \varphi_k &= \text{arctan2}\left( \big\langle\vec{a}_k,\vec{y}_k\big\rangle - \big\langle\vec{b}_k,\vec{x}_k\big\rangle, \big\langle\vec{a}_k,\vec{x}_k\big\rangle + \big\langle\vec{b}_k,\vec{y}_k\big\rangle\right), \tag{6c} \\ \theta_k &= \text{arctan2}\left( \big\langle\vec{a}_k,\vec{y}_k\big\rangle + \big\langle\vec{b}_k,\vec{x}_k\big\rangle, \big\langle\vec{a}_k,\vec{x}_k\big\rangle - \big\langle\vec{b}_k,\vec{y}_k\big\rangle\right). \tag{6d} \end{align}

Así, cualquier curva paramétrica cerrada multidimensional podría escribirse como una suma de pares de círculos contrarrotantes en el mismo plano.


Esperemos que quede claro desde $(1)$ y $(2)$ que cada componente de frecuencia debe formar una elipse en un plano determinado. La descomposición de una elipse en dos círculos que giran en sentido contrario se demuestra con la siguiente animación:

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X