#spline #spline-interpolation #interpolation #geometry #numbers

无需 std pythagorean-hodographs

毕达哥拉斯 hodograph 样条曲线

11 个版本

0.5.4 2023 年 12 月 9 日
0.5.3 2022 年 12 月 31 日
0.4.0 2022 年 12 月 27 日
0.3.3 2022 年 12 月 27 日
0.1.0 2022 年 12 月 10 日

420数学

每月 35 次下载

MIT/Apache

19KB
294

pythagorean-hodographs

Build Status License Crates.io API

基于 R. Farouki 的工作和 Zbyněk Šír & Bert Jüttler 的这篇论文 ,在 Rust 中实现 Pythagorean hodograph (PH) 样条曲线。

什么是毕达哥拉斯 hodograph?

毕达哥拉斯 hodograph 是满足毕达哥拉斯恒等式类似物的插值多项式曲线。为了说明,设 $\mathbf{p}(t)$ 是 $\mathbb{R}^2$ 中的多项式参数曲线。如果存在多项式 $u(t), v(t), w(t)$,使得以下成立

$$\begin{equation} \frac{d\mathbf{p}(t)}{dt} = \begin{bmatrix} u(t)^2 - v(t)^2 \ 2u(t)v(t) \ \end{bmatrix}\cdot w(t) \end{equation}$$

那么 $\mathbf{p}(t)$ 是毕达哥拉斯 hodograph,因为 $(u^2-v^2)^2+(2uv)^2=(u^2+v^2)^2$,是一个多项式的完全平方。然后可以得出 $|\mathbf{p}'(t)|=(u(t)^2+v(t)^2)\cdot w(t)$。$\mathbf{p}(t)$ 然后是一个 平面 PH 曲线。

由于这个原因,毕达哥拉斯 hodograph 具有许多有用的性质

  1. 切向量 $\frac{\mathbf{p}'(t)}{|\mathbf{p}'(t)|}$ 的分量是有理函数。这使得计算切线变得很快,尽管现在有专门的 CPU 指令来处理平方根。

  2. 弧长函数 $s(t)=\int_0^t|\mathbf{p}'(\tau)|\ d\tau$ 是多项式函数。

  3. 作为 #2 的推论,使用牛顿法计算弧长参数化是微不足道的。

  4. 在三维空间中,Pythagorean hodographs 与称为 Euler-Rodrigues 坐标系 的自然移动框架相关。

空间 PH 曲线

熟悉的研究者可能会注意到与复数的联系。特别是,如果 $x(t)=u(t)+iv(t)$,那么 $p(t)=x(t)^2$(其中 $\mathbf{p}(t)$ 和 $p(t)$ 通过从 $\mathbb{R}^2\rightarrow\mathbb{C}$ 的映射等价)。

复数同构于平面,但如果我们想要模拟三维空间,则需要其他东西——四元数。以下是这样表示的:$\mathbf{r}(t)$ 是空间 PH 曲线,如果存在一个四元数多项式曲线 $\mathcal{A}(t)$,使得

$$\begin{equation} \begin{gathered} \begin{aligned} \mathcal{A}(t)&=u(t)+v(t)\cdot\mathbf{i}+p(t)\cdot\mathbf{j}+q(t)\cdot\mathbf{k} \ r'(t)&=-\mathcal{A}(t)\ \mathbf{k}\ \bar{\mathcal{A}}(t)\ &=-2[u(t)p(t)+v(t)q(t)]\cdot\mathbf{i}+2[u(t)v(t)-p(t)q(t)]\cdot\mathbf{j}+2[u(t)^2-v(t)^2-p(t)^2+q(t)^2]\cdot\mathbf{k} \end{aligned} \end{gathered} \end{equation}$$

然后有 $|\mathbf{r}'(t)|=|\mathcal{A}(t)|^2.$

Euler-Rodrigues 坐标系

在空间PH曲线中,存在一个与之自然关联的移动坐标系,称为欧拉-罗德里格斯坐标系。对于切线、法线和副法线,有以下公式

$$\begin{equation} \begin{bmatrix} \mathbf{T}(t) \ \mathbf{N}(t) \ \mathbf{B}(t) \end{bmatrix} = \begin{bmatrix} \mathcal{A}(t)\ \mathbf{i}\ \bar{\mathcal{A}}(t)\ \mathcal{A}(t)\ \mathbf{j}\ \bar{\mathcal{A}}(t) \ \mathcal{A}(t)\ \mathbf{k}\ \bar{\mathcal{A}}(t) \end{bmatrix} \end{equation}$$

或者更简洁地,旋转矩阵 $[\mathbf{T\ N\ B}]$ 等同于与四元数 $\mathcal{A}(t)$ 相关的3维旋转。

依赖项

~4MB
~106K SLoC