Project Graph

CR曲线

说明

全称为:Cublic Catmull Rom Spline,一般项目里面简称CR曲线。

计算

CR曲线本质是一个参数方程,给定四个控制点p0,p1,p2,p3\boldsymbol{p_0},\boldsymbol{p_1},\boldsymbol{p_2},\boldsymbol{p_3}以及α,τ\alpha,\tau通过如下方法计算:

t01=p0p1αt12=p1p2αt23=p2p3αt_{01}=\lvert \boldsymbol{p_0}-\boldsymbol{p_1} \rvert ^\alpha \\ t_{12}=\lvert \boldsymbol{p_1}-\boldsymbol{p_2} \rvert ^\alpha \\ t_{23}=\lvert \boldsymbol{p_2}-\boldsymbol{p_3} \rvert ^\alpha m1=(1τ)(p2p1+t12(p1p0t01p2p0t01+t12))\boldsymbol{m_1}=(1-\tau) (\boldsymbol{p_2} - \boldsymbol{p_1} + t_{12} ( \frac{\boldsymbol{p_1} - \boldsymbol{p_0}}{t_{01}} - \frac{\boldsymbol{p_2} - \boldsymbol{p_0}}{t_{01} + t_{12}} )) m2=(1τ)(p2p1+t12(p3p2t23p3p1t12+t23))\boldsymbol{m_2}=(1-\tau) (\boldsymbol{p_2} - \boldsymbol{p_1} + t_{12} ( \frac{\boldsymbol{p_3} - \boldsymbol{p_2}}{t_{23}} - \frac{\boldsymbol{p_3} - \boldsymbol{p_1}}{t_{12} + t_{23}} )) a=2(p1p2)+m1+m2b=3(p1p2)m1m1m2c=m1d=p1\boldsymbol{a}=2(\boldsymbol{p_1}-\boldsymbol{p_2})+\boldsymbol{m_1}+\boldsymbol{m_2} \\ \boldsymbol{b}=-3(\boldsymbol{p_1}-\boldsymbol{p_2})-\boldsymbol{m_1}-\boldsymbol{m_1}-\boldsymbol{m_2} \\ \boldsymbol{c}=\boldsymbol{m_1} \\ \boldsymbol{d}=\boldsymbol{p_1} \\ p(t)=at3+bt2+ct+d\boldsymbol{p}(t)=\boldsymbol{a}t^3+\boldsymbol{b}t^2+\boldsymbol{c}t+\boldsymbol{d}

弧长

先求导

p=dp(t)dt=3t2a+2tb+c{\boldsymbol{p}}^{'}=\frac{d\boldsymbol{p}(t)}{dt}=3t^2\boldsymbol{a}+2t\boldsymbol{b}+\boldsymbol{c}

弧长:

s=01pdts=\int_0^1 \lvert {\boldsymbol{p}}^{'} \rvert dt s(t0,t1)=t0t1pdt=(t1t0)01p(x(t1t0)+t0)dxs(t_0, t_1) = \int_{t_0}^{t_1} \lvert {\boldsymbol{p}}^{'} \rvert dt = (t_1-t_0) \int_0^1 \lvert {\boldsymbol{p}}^{'}(x(t_1-t_0)+t_0)\rvert dx

其中

x=tt0t1t0x = \frac{t-t_0}{t_1-t_0}

On this page