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 次下载
19KB
294 行
pythagorean-hodographs
基于 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 具有许多有用的性质
-
切向量 $\frac{\mathbf{p}'(t)}{|\mathbf{p}'(t)|}$ 的分量是有理函数。这使得计算切线变得很快,尽管现在有专门的 CPU 指令来处理平方根。
-
弧长函数 $s(t)=\int_0^t|\mathbf{p}'(\tau)|\ d\tau$ 是多项式函数。
-
作为 #2 的推论,使用牛顿法计算弧长参数化是微不足道的。
-
在三维空间中,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