Skip to main content
edited body
Source Link
lightxbulb
  • 2.6k
  • 1
  • 7
  • 16

In practice if you have a continuously twice differentiable regular curve $p(t) = (x(t), y(t), z(t))$ you can compute its velocity as $v(t) = \dot{p}(t) = \frac{fp}{dt}(t)$$v(t) = \dot{p}(t) = \frac{dp}{dt}(t)$ and its acceleration as $a(t) = \dot{v}(t) = \ddot{p}(t)$ and use those to form an orthonormal basis (this wouod fail if $v(t)=0$ or $a(t)=0$). The velocity $v$ is tangent to the curve, but $a$ is not necessarily orthogonal to it, so if we wish to construct an orthonormal basis we need to orthonormalize those, e.g., by using Gram-Schmidt: \begin{equation} f_1(t) = \frac{v(t)}{\|v(t)\|_2}, \quad a_{\perp v}(t) = a(t) - (f_1(t)\cdot a(t))f_1(t), \quad f_2(t) = \frac{a(t)}{\|a(t)\|_2}. \end{equation}

We can compute the third vector by using the cross product $f_3(t) = f_1(t)\times f_2(t)$. Now $f_1(t), f_2(t), f_3(t)$ form an orthonormal basis, and you can use the following for your camera matrix $C$ and view matrix $V$: \begin{align} C &= \begin{bmatrix} | & | & | & | \\ f_1(t) & f_2(t) & f_3(t) & p(t) \\ | & | & | & | \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} F(t) & p(t) \\ 0^T & 1 \end{bmatrix}, \\ V &= C^{-1} = \begin{bmatrix} (F(t))^T & -(F(t))^Tp(t) \\ 0^T & 1 \end{bmatrix}. \end{align}

Looking at your code the specific curve you have is parwmetrized as follows: \begin{align} x(t) = \frac{a \cos(t)}{1+\sin^2(t)}, \quad y(t) = \frac{a \cos(t)\sin(t)}{1+\sin^2(t)},\quad z(t) = b \cos(c t). \end{align}

The first derivatives (the components of the velocity) can be computed in the following way (I derived this without pen and paper so you should double check it): \begin{align} \dot{x}(t) &= -\frac{a\sin(t)}{1+\sin^2(t)}-\frac{2a\cos^2(t)\sin(t)}{(1+\sin^2(t))^2}, \\ \dot{y}(t) &= \frac{a \cos(2t)}{1+\sin^2(t)} - \frac{a\sin^2(2t)}{2(1+\sin^2(t))^2}, \\ \dot{z}(t) &= -bc\sin(ct). \end{align}

The second derivatives (components of the accellerationacceleration) are too tedious to compute so I suggest askingusing wolfram alpha or some symbolic solver to do that for you.

In practice if you have a continuously twice differentiable regular curve $p(t) = (x(t), y(t), z(t))$ you can compute its velocity as $v(t) = \dot{p}(t) = \frac{fp}{dt}(t)$ and its acceleration as $a(t) = \dot{v}(t) = \ddot{p}(t)$ and use those to form an orthonormal basis (this wouod fail if $v(t)=0$ or $a(t)=0$). The velocity $v$ is tangent to the curve, but $a$ is not necessarily orthogonal to it, so if we wish to construct an orthonormal basis we need to orthonormalize those, e.g., by using Gram-Schmidt: \begin{equation} f_1(t) = \frac{v(t)}{\|v(t)\|_2}, \quad a_{\perp v}(t) = a(t) - (f_1(t)\cdot a(t))f_1(t), \quad f_2(t) = \frac{a(t)}{\|a(t)\|_2}. \end{equation}

We can compute the third vector by using the cross product $f_3(t) = f_1(t)\times f_2(t)$. Now $f_1(t), f_2(t), f_3(t)$ form an orthonormal basis, and you can use the following for your camera matrix $C$ and view matrix $V$: \begin{align} C &= \begin{bmatrix} | & | & | & | \\ f_1(t) & f_2(t) & f_3(t) & p(t) \\ | & | & | & | \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} F(t) & p(t) \\ 0^T & 1 \end{bmatrix}, \\ V &= C^{-1} = \begin{bmatrix} (F(t))^T & -(F(t))^Tp(t) \\ 0^T & 1 \end{bmatrix}. \end{align}

Looking at your code the specific curve you have is parwmetrized as follows: \begin{align} x(t) = \frac{a \cos(t)}{1+\sin^2(t)}, \quad y(t) = \frac{a \cos(t)\sin(t)}{1+\sin^2(t)},\quad z(t) = b \cos(c t). \end{align}

The first derivatives (the components of the velocity) can be computed in the following way (I derived this without pen and paper so you should double check it): \begin{align} \dot{x}(t) &= -\frac{a\sin(t)}{1+\sin^2(t)}-\frac{2a\cos^2(t)\sin(t)}{(1+\sin^2(t))^2}, \\ \dot{y}(t) &= \frac{a \cos(2t)}{1+\sin^2(t)} - \frac{a\sin^2(2t)}{2(1+\sin^2(t))^2}, \\ \dot{z}(t) &= -bc\sin(ct). \end{align}

The second derivatives (components of the accelleration) are too tedious to compute so I suggest asking wolfram alpha or some symbolic solver to do that for you.

In practice if you have a continuously twice differentiable regular curve $p(t) = (x(t), y(t), z(t))$ you can compute its velocity as $v(t) = \dot{p}(t) = \frac{dp}{dt}(t)$ and its acceleration as $a(t) = \dot{v}(t) = \ddot{p}(t)$ and use those to form an orthonormal basis (this wouod fail if $v(t)=0$ or $a(t)=0$). The velocity $v$ is tangent to the curve, but $a$ is not necessarily orthogonal to it, so if we wish to construct an orthonormal basis we need to orthonormalize those, e.g., by using Gram-Schmidt: \begin{equation} f_1(t) = \frac{v(t)}{\|v(t)\|_2}, \quad a_{\perp v}(t) = a(t) - (f_1(t)\cdot a(t))f_1(t), \quad f_2(t) = \frac{a(t)}{\|a(t)\|_2}. \end{equation}

We can compute the third vector by using the cross product $f_3(t) = f_1(t)\times f_2(t)$. Now $f_1(t), f_2(t), f_3(t)$ form an orthonormal basis, and you can use the following for your camera matrix $C$ and view matrix $V$: \begin{align} C &= \begin{bmatrix} | & | & | & | \\ f_1(t) & f_2(t) & f_3(t) & p(t) \\ | & | & | & | \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} F(t) & p(t) \\ 0^T & 1 \end{bmatrix}, \\ V &= C^{-1} = \begin{bmatrix} (F(t))^T & -(F(t))^Tp(t) \\ 0^T & 1 \end{bmatrix}. \end{align}

Looking at your code the specific curve you have is parwmetrized as follows: \begin{align} x(t) = \frac{a \cos(t)}{1+\sin^2(t)}, \quad y(t) = \frac{a \cos(t)\sin(t)}{1+\sin^2(t)},\quad z(t) = b \cos(c t). \end{align}

The first derivatives (the components of the velocity) can be computed in the following way (I derived this without pen and paper so you should double check it): \begin{align} \dot{x}(t) &= -\frac{a\sin(t)}{1+\sin^2(t)}-\frac{2a\cos^2(t)\sin(t)}{(1+\sin^2(t))^2}, \\ \dot{y}(t) &= \frac{a \cos(2t)}{1+\sin^2(t)} - \frac{a\sin^2(2t)}{2(1+\sin^2(t))^2}, \\ \dot{z}(t) &= -bc\sin(ct). \end{align}

The second derivatives (components of the acceleration) are too tedious to compute so I suggest using wolfram alpha or some symbolic solver to do that for you.

Source Link
lightxbulb
  • 2.6k
  • 1
  • 7
  • 16

In practice if you have a continuously twice differentiable regular curve $p(t) = (x(t), y(t), z(t))$ you can compute its velocity as $v(t) = \dot{p}(t) = \frac{fp}{dt}(t)$ and its acceleration as $a(t) = \dot{v}(t) = \ddot{p}(t)$ and use those to form an orthonormal basis (this wouod fail if $v(t)=0$ or $a(t)=0$). The velocity $v$ is tangent to the curve, but $a$ is not necessarily orthogonal to it, so if we wish to construct an orthonormal basis we need to orthonormalize those, e.g., by using Gram-Schmidt: \begin{equation} f_1(t) = \frac{v(t)}{\|v(t)\|_2}, \quad a_{\perp v}(t) = a(t) - (f_1(t)\cdot a(t))f_1(t), \quad f_2(t) = \frac{a(t)}{\|a(t)\|_2}. \end{equation}

We can compute the third vector by using the cross product $f_3(t) = f_1(t)\times f_2(t)$. Now $f_1(t), f_2(t), f_3(t)$ form an orthonormal basis, and you can use the following for your camera matrix $C$ and view matrix $V$: \begin{align} C &= \begin{bmatrix} | & | & | & | \\ f_1(t) & f_2(t) & f_3(t) & p(t) \\ | & | & | & | \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} F(t) & p(t) \\ 0^T & 1 \end{bmatrix}, \\ V &= C^{-1} = \begin{bmatrix} (F(t))^T & -(F(t))^Tp(t) \\ 0^T & 1 \end{bmatrix}. \end{align}

Looking at your code the specific curve you have is parwmetrized as follows: \begin{align} x(t) = \frac{a \cos(t)}{1+\sin^2(t)}, \quad y(t) = \frac{a \cos(t)\sin(t)}{1+\sin^2(t)},\quad z(t) = b \cos(c t). \end{align}

The first derivatives (the components of the velocity) can be computed in the following way (I derived this without pen and paper so you should double check it): \begin{align} \dot{x}(t) &= -\frac{a\sin(t)}{1+\sin^2(t)}-\frac{2a\cos^2(t)\sin(t)}{(1+\sin^2(t))^2}, \\ \dot{y}(t) &= \frac{a \cos(2t)}{1+\sin^2(t)} - \frac{a\sin^2(2t)}{2(1+\sin^2(t))^2}, \\ \dot{z}(t) &= -bc\sin(ct). \end{align}

The second derivatives (components of the accelleration) are too tedious to compute so I suggest asking wolfram alpha or some symbolic solver to do that for you.