Hermite 与 Bezier 曲线的转换公式 |
您所在的位置:网站首页 › 转曲线怎么转成曲线形状 › Hermite 与 Bezier 曲线的转换公式 |
简介
本文给出 Hermite 与 Bezier 曲线互转的公式及其推导过程。 Bezier 曲线p ( t ) = p 0 B 0 ( t ) + p 1 B 1 ( t ) + p 2 B 2 ( t ) + p 3 B 3 ( t ) , t ∈ [ 0 , 1 ] \mathbf{p}(t) = \mathbf{p}_0 B_0(t) + \mathbf{p}_1 B_1(t) + \mathbf{p}_2 B_2(t) + \mathbf{p}_3 B_3(t), t \in [0, 1] p(t)=p0B0(t)+p1B1(t)+p2B2(t)+p3B3(t),t∈[0,1] 其中: B 0 ( t ) = ( 1 − t ) 3 B 1 ( t ) = 3 ( 1 − t ) 2 t B 2 ( t ) = 3 ( 1 − t ) t 2 B 3 ( t ) = t 3 \begin{aligned} B_0(t) &= (1 − t)^3 \\ B_1(t) &= 3(1 − t)^2t \\ B_2(t) &= 3(1 − t)t^2 \\ B_3(t) &= t^3 \end{aligned} B0(t)B1(t)B2(t)B3(t)=(1−t)3=3(1−t)2t=3(1−t)t2=t3 矩阵形式: p ( t ) = [ 1 t t 2 t 3 ] [ 1 0 0 0 − 3 3 0 0 3 − 6 3 0 − 1 3 − 3 1 ] [ p 0 p 1 p 2 p 3 ] \mathbf{p}(t) = \begin{bmatrix} 1 & t & t^2 & t^3 \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0 \\ -3 & 3 & 0 & 0 \\ 3 & -6 & 3 & 0 \\ -1 & 3 & -3 & 1 \end{bmatrix} \begin{bmatrix} \mathbf{p}_0 \\ \mathbf{p}_1 \\ \mathbf{p}_2 \\ \mathbf{p}_3 \end{bmatrix} p(t)=[1tt2t3]⎣⎢⎢⎡1−33−103−63003−30001⎦⎥⎥⎤⎣⎢⎢⎡p0p1p2p3⎦⎥⎥⎤ Hermite 曲线q ( t ) = q 0 H 00 ( t ) + u 0 H 10 ( t ) + q 1 H 01 ( t ) + u 1 H 11 ( t ) , t ∈ [ 0 , 1 ] \mathbf{q}(t) = \mathbf{q}_0 H_{00}(t) + \mathbf{u}_0 H_{10} (t) + \mathbf{q}_1 H_{01}(t) + \mathbf{u}_1 H_{11}(t), t \in [0, 1] q(t)=q0H00(t)+u0H10(t)+q1H01(t)+u1H11(t),t∈[0,1] 其中: H 00 ( t ) = ( 1 + 2 t ) ( 1 − t ) 2 H 10 ( t ) = t ( 1 − t ) 2 H 01 ( t ) = t 2 ( 3 − 2 t ) H 11 ( t ) = − t 2 ( 1 − t ) \begin{aligned} H_{00}(t) &= (1 + 2t)(1 − t)^2 \\ H_{10}(t) &= t(1 − t)^2 \\ H_{01}(t) &= t^2(3 − 2t) \\ H_{11}(t) &= −t^2(1 − t) \end{aligned} H00(t)H10(t)H01(t)H11(t)=(1+2t)(1−t)2=t(1−t)2=t2(3−2t)=−t2(1−t) 矩阵形式: q ( t ) = [ 1 t t 2 t 3 ] [ 1 0 0 0 0 1 0 0 − 3 − 2 3 − 1 2 1 − 2 1 ] [ q 0 u 0 q 1 u 1 ] \mathbf{q}(t) = \begin{bmatrix} 1 & t & t^2 & t^3 \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ -3 & -2 & 3 & -1 \\ 2 & 1 & -2 & 1 \end{bmatrix} \begin{bmatrix} \mathbf{q}_0 \\ \mathbf{u}_0 \\ \mathbf{q}_1 \\ \mathbf{u}_1 \end{bmatrix} q(t)=[1tt2t3]⎣⎢⎢⎡10−3201−21003−200−11⎦⎥⎥⎤⎣⎢⎢⎡q0u0q1u1⎦⎥⎥⎤ 转换公式 推导将 hermite 和 bezier 的参数写成矩阵 C h C_h Ch 和 C b C_b Cb,如下: C h = [ q 0 u 0 q 1 u 1 ] C b = [ p 0 p 1 p 2 p 3 ] \begin{aligned} C_h &= \begin{bmatrix} \mathbf{q}_0 \\ \mathbf{u}_0 \\ \mathbf{q}_1 \\ \mathbf{u}_1 \end{bmatrix}\\ C_b &= \begin{bmatrix} \mathbf{p}_0 \\ \mathbf{p}_1 \\ \mathbf{p}_2 \\ \mathbf{p}_3 \end{bmatrix} \end{aligned} ChCb=⎣⎢⎢⎡q0u0q1u1⎦⎥⎥⎤=⎣⎢⎢⎡p0p1p2p3⎦⎥⎥⎤ 由于 bezier 和 hermite 是等价的,有: x ( t ) = [ 1 t t 2 t 3 ] M b C b = [ 1 t t 2 t 3 ] M h C h \begin{aligned} x(t) &= \begin{bmatrix}1&t&t^2&t^3\end{bmatrix}M_bC_b \\ &= \begin{bmatrix}1&t&t^2&t^3\end{bmatrix}M_hC_h \end{aligned} x(t)=[1tt2t3]MbCb=[1tt2t3]MhCh 其中矩阵 M 是 hermite 和 bezier 矩阵形式中间的那个矩阵。 于是: M b C b = M h C h M_bC_b = M_hC_h MbCb=MhCh 所以有: C b = M b − 1 M h C h = [ 1 0 0 0 1 1 / 3 0 0 1 2 / 3 1 / 3 0 1 1 1 1 ] [ 1 0 0 0 0 1 0 0 − 3 − 2 3 − 1 2 1 − 2 1 ] C h = [ 1 0 0 0 1 1 / 3 0 0 0 0 1 − 1 / 3 0 0 1 0 ] C h \begin{aligned} C_b &= M_b^{-1}M_hC_h \\ &= \begin{bmatrix}1 & 0 & 0 & 0 \\1 & 1/3 & 0 & 0 \\1 & 2/3 & 1/3 & 0 \\1 & 1 & 1 & 1\end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ -3 & -2 & 3 & -1 \\ 2 & 1 & -2 & 1 \end{bmatrix} C_h \\ &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 1/3 & 0 & 0 \\ 0 & 0 & 1 & -1/3 \\ 0 & 0 & 1 & 0 \end{bmatrix} C_h \end{aligned} Cb=Mb−1MhCh=⎣⎢⎢⎡111101/32/31001/310001⎦⎥⎥⎤⎣⎢⎢⎡10−3201−21003−200−11⎦⎥⎥⎤Ch=⎣⎢⎢⎡110001/300001100−1/30⎦⎥⎥⎤Ch 所以,Herimite 控制参数与 Bezier 控制参数的关系是: [ p 0 p 1 p 2 p 3 ] = [ 1 0 0 0 1 1 / 3 0 0 0 0 1 − 1 / 3 0 0 1 0 ] [ q 0 u 0 q 1 u 1 ] \begin{aligned} \begin{bmatrix} \mathbf{p}_0 \\ \mathbf{p}_1 \\ \mathbf{p}_2 \\ \mathbf{p}_3 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 1/3 & 0 & 0 \\ 0 & 0 & 1 & -1/3 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} \mathbf{q}_0 \\ \mathbf{u}_0 \\ \mathbf{q}_1 \\ \mathbf{u}_1 \end{bmatrix} \end{aligned} ⎣⎢⎢⎡p0p1p2p3⎦⎥⎥⎤=⎣⎢⎢⎡110001/300001100−1/30⎦⎥⎥⎤⎣⎢⎢⎡q0u0q1u1⎦⎥⎥⎤ Hermite 转 Bezier由推导的公式,可知: p 0 = q 0 p 1 = q 0 + u 0 3 p 2 = q 1 − u 1 3 p 3 = q 1 \begin{aligned} \mathbf{p}_0 &= \mathbf{q}_0 \\ \mathbf{p}_1 &= \mathbf{q}_0 + \frac{\mathbf{u}_0}{3} \\ \mathbf{p}_2 &= \mathbf{q}_1 - \frac{\mathbf{u}_1}{3} \\ \mathbf{p}_3 &= \mathbf{q}_1 \end{aligned} p0p1p2p3=q0=q0+3u0=q1−3u1=q1 Bezier 转 Hermite由推导的公式,可知: q 0 = p 0 u 0 = 3 ( p 1 − p 0 ) q 1 = p 2 u 1 = 3 ( p 3 − p 2 ) \begin{aligned} \mathbf{q}_0 &= \mathbf{p}_0 \\ \mathbf{u}_0 &= 3(\mathbf{p}_1 - \mathbf{p}_0) \\ \mathbf{q}_1 &= \mathbf{p}_2 \\ \mathbf{u}_1 &= 3(\mathbf{p}_3 - \mathbf{p}_2) \end{aligned} q0u0q1u1=p0=3(p1−p0)=p2=3(p3−p2) 转换效果示例可以看到,两条曲线完美重合。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |