公司门户网站的设计与实现,某俄文网站,哪里可以做寄生虫网站,页面设计大赛三次插值曲线
1.1.三次样条曲线
三次样条曲线的基本思想是#xff0c;在给定的一系列点#xff08;称为控制点或数据点#xff09;之间#xff0c;通过一系列三次多项式曲线段来拟合这些点#xff0c;使得整个曲线既平滑又准确地通过所有控制点。
1.1.1.数学定义
给定…三次插值曲线
1.1.三次样条曲线
三次样条曲线的基本思想是在给定的一系列点称为控制点或数据点之间通过一系列三次多项式曲线段来拟合这些点使得整个曲线既平滑又准确地通过所有控制点。
1.1.1.数学定义
给定一组点 ( P_0, P_1, …, P_n )其中 ( P_i (x_i, y_i) )( x_0 x_1 … x_n )。三次样条曲线由以下性质定义
1.局部控制每个曲线段 ( S_i(x) ) 在区间 ( [x_i, x_{i1}] ) 上是三次多项式。
2.连续性所有曲线段在连接点处具有相同的一阶导数和二阶导数即: ( S i ( x i ) S i 1 ( x i ) ) ; ( S i ′ ( x i ) S i 1 ′ ( x i ) ) ; ( S i ′ ′ ( x i ) S i 1 ′ ′ ( x i ) ) ; ( S_i(x_i) S_{i1}(x_i) );\\ ( S_i(x_i) S_{i1}(x_i) );\\ ( S_i(x_i) S_{i1}(x_i) ); (Si(xi)Si1(xi));(Si′(xi)Si1′(xi));(Si′′(xi)Si1′′(xi)); 3.边界条件通常有两种边界条件自然边界Natural和固定边界Clamped。自然边界指在曲线两端二阶导数为零即 ( S’‘_0(x_0) S’_n(x_n) 0 )。固定边界则需要指定曲线两端的斜率。
1.1.2.插值公式
对于区间 ( [x_i, x_{i1}] ) 上的曲线段 ( S_i(x) )其一般形式为 y S i ( x ) a i b i ( x − x i ) c i ( x − x i ) 2 d i ( x − x i ) 3 yS_i(x) a_i b_i(x - x_i) c_i(x - x_i)^2 d_i(x - x_i)^3 ySi(x)aibi(x−xi)ci(x−xi)2di(x−xi)3 其中( a_i, b_i, c_i, d_i ) 是系数需要通过以下条件确定
1.对每个S_i(x)其必过型值点P_i, P_{i1}。
2.对排除首个末个型值点的每个中间型值点这些型值点分别位于两个分段函数上。
两个分段函数在此类型值点上一阶导数二阶导数连续。
3.边界条件。如限定P_0P_n处二阶导数为0或指定P__0P_n处一阶导数。
通过上述三个条件我们可以唯一确定每一段S_i(x)方程的系数 a_i, b_i, c_i, d_i 。
1.1.3.实例分析
假设现有 1. P 0 , . . . , P n − 1 共 n 个二维点。对 P i 其坐标为 ( x i , y i ) 。满足 x 0 . . . x n − 1 。 2. 给定 P 0 处一阶导数 y 0 ′ 给定 P n − 1 处一阶导数 y n − 1 ′ 。 1.P_0,...,P_{n-1}共n个二维点。对P_{i}其坐标为(x_{i}, y_{i})。满足x_{0}...x_{n-1}。\\ 2.给定P_{0}处一阶导数y_{0}给定P_{n-1}处一阶导数y_{n-1}。 1.P0,...,Pn−1共n个二维点。对Pi其坐标为(xi,yi)。满足x0...xn−1。2.给定P0处一阶导数y0′给定Pn−1处一阶导数yn−1′。 要求依据以上信息给出从 P 0 到 P n − 1 的共 n − 1 段三次样条曲线的曲线方程。 P_0到P_{n-1}的共n-1段三次样条曲线的曲线方程。 P0到Pn−1的共n−1段三次样条曲线的曲线方程。 分析 对第 i 段三次样条函数而言其形式必然为 y s i ( x ) a i b i ( x − x i ) c i ( x − x i ) 2 d i ( x − x i ) 3 x i x x i 1 ; 我们只需分别求出 a i , b i , c i , d i 即可。 对第i段三次样条函数而言其形式必然为\\ y s_{i}(x) a_{i}b_{i}(x-x_{i})c_{i}(x-x_{i})^2d_{i}(x-x_{i})^3 x_{i}xx_{i1};\\ 我们只需分别求出a_{i},b_{i},c_{i},d_{i}即可。 对第i段三次样条函数而言其形式必然为ysi(x)aibi(x−xi)ci(x−xi)2di(x−xi)3xixxi1;我们只需分别求出ai,bi,ci,di即可。 1. 通过 y s i ( x i ) y i 可得 a i y i ; 通过ys_{i}(x_{i})y_{i}可得 a_{i} y_{i}; 通过ysi(xi)yi可得aiyi; 2. 通过 s i ′ ′ ( x i ) 2 c i 。我们假设每个 P i 处二阶导数为 M i 。则有 c i M i / 2 ; 通过s_{i}(x_{i})2c_{i}。我们假设每个P_{i}处二阶导数为M_{i}。则有c_{i}M_{i}/2; 通过si′′(xi)2ci。我们假设每个Pi处二阶导数为Mi。则有ciMi/2; 3. 通过 S i ′ ′ ( x i 1 ) S i 1 ′ ′ ( x i 1 ) 可得 d i ( M i 1 − M i ) / [ 6 ( x i 1 − x i ) ] ; 通过S_{i}(x_{i1})S_{i1}(x_{i1})可得d_{i}(M_{i1}-M_{i})/[6(x_{i1}-x_{i})]; 通过Si′′(xi1)Si1′′(xi1)可得di(Mi1−Mi)/[6(xi1−xi)]; 4. 通过 S i ( x i 1 ) S i 1 ( x i 1 ) 可得 b i ( y i 1 − y i ) / ( x i 1 − x i ) − ( x i 1 − x i ) [ M i 1 / 6 M i / 3 ] 通过S_{i}(x_{i1})S_{i1}(x_{i1})可得\\ b_{i}(y_{i1}-y_{i})/(x_{i1}-x_{i})-(x_{i1}-x_{i})[M_{i1}/6M_{i}/3] 通过Si(xi1)Si1(xi1)可得bi(yi1−yi)/(xi1−xi)−(xi1−xi)[Mi1/6Mi/3] 通过上述 1 , 2 , 3 , 4 可知只要知道 M 0 , . . . , M n − 1 便可求出 a i , b i , c i , d i 进而唯一确定每一段的三次样条曲线函数。 下面分析如何求取 M 0 , . . . , M n − 1 。 通过上述1,2,3,4可知只要知道M_{0},...,M_{n-1}便可求出a_{i},b_{i},c_{i},d_{i}进而唯一确定每一段的三次样条曲线函数。\\ 下面分析如何求取M_{0},...,M_{n-1}。 通过上述1,2,3,4可知只要知道M0,...,Mn−1便可求出ai,bi,ci,di进而唯一确定每一段的三次样条曲线函数。下面分析如何求取M0,...,Mn−1。 1. 通过 S i ′ ( x i 1 ) S i 1 ′ ( x i 1 ) 可得 M i [ ( x i 1 − x i ) / 6 ] M i 1 [ ( x i 2 − x i ) / 3 ] M i 2 [ ( x i 2 − x i 1 ) / 6 ] ( y i 2 − y i 1 ) / ( x i 2 − x i 1 ) − ( y i 1 − y i ) / ( x i 1 − x i ) ; 上述共有 n − 2 个线性方程。为了依赖线性方程组求解 n 个变量我们还需要两个。 通过S_{i}(x_{i1})S_{i1}(x_{i1})可得\\ M_{i}[(x_{i1}-x_{i})/6]M_{i1}[(x_{i2}-x_{i})/3]M_{i2}[(x_{i2}-x_{i1})/6]\\ (y_{i2}-y_{i1})/(x_{i2}-x_{i1})-(y_{i1}-y_{i})/(x_{i1}-x_{i});\\ 上述共有n-2个线性方程。为了依赖线性方程组求解n个变量我们还需要两个。 通过Si′(xi1)Si1′(xi1)可得Mi[(xi1−xi)/6]Mi1[(xi2−xi)/3]Mi2[(xi2−xi1)/6](yi2−yi1)/(xi2−xi1)−(yi1−yi)/(xi1−xi);上述共有n−2个线性方程。为了依赖线性方程组求解n个变量我们还需要两个。 2. 通过 y 0 ′ S 0 ′ ( x 0 ) 可得 M 0 [ ( x 1 − x 0 ) / 3 ] M 1 [ ( x 1 − x 0 ) / 6 ] ( y 1 − y 0 ) / ( x 1 − x 0 ) ; 通过y_{0}S_{0}(x_{0})可得\\ M_{0}[(x_{1}-x_{0})/3]M_{1}[(x_{1}-x_{0})/6](y_{1}-y_{0})/(x_{1}-x_{0}); 通过y0′S0′(x0)可得M0[(x1−x0)/3]M1[(x1−x0)/6](y1−y0)/(x1−x0); 3. 通过 y n − 1 ′ S n − 2 ′ ( x n − 1 ) 可得 M n − 2 [ ( x n − 1 − x n − 2 ) / 6 ] M n − 1 [ ( x n − 1 − x n − 2 ) / 3 ] y n − 1 ′ − ( y n − 1 − y n − 2 ) / ( x n − 1 − x n − 2 ) ; 通过y_{n-1}S_{n-2}(x_{n-1})可得\\ M_{n-2}[(x_{n-1}-x_{n-2})/6]M_{n-1}[(x_{n-1}-x_{n-2})/3]\\ y_{n-1}-(y_{n-1}-y_{n-2})/(x_{n-1}-x_{n-2}); 通过yn−1′Sn−2′(xn−1)可得Mn−2[(xn−1−xn−2)/6]Mn−1[(xn−1−xn−2)/3]yn−1′−(yn−1−yn−2)/(xn−1−xn−2); 这样我们构建了n的线性等式。这n个线性等式可以用矩阵形式表示为 A n , n M n , 1 D n , 1 ; M n , 1 A n , n − 1 D n , 1 ; A_{n,n}M_{n,1}D_{n,1};\\ M_{n,1}A^{-1}_{n,n}D_{n,1}; An,nMn,1Dn,1;Mn,1An,n−1Dn,1; 这样我们通过先求取A的逆矩阵接着便可求出M。然后依据前述求取系数的方法便可唯一确定每一段的三次样条曲线方程。
1.2.三次参数曲线
这种曲线通过一系列控制点使用三次多项式来定义曲线上每个点的位置使得曲线平滑地通过这些控制点。
1.2.1.基本概念
在三次参数样条曲线中曲线的每个分量如二维空间中的x和y或三维空间中的x、y和z都是参数t的三次多项式。对于给定的一组控制点( P_i(x_i, y_i, z_i) )曲线的数学表达式可以写作 P ( t ) [ x ( t ) , y ( t ) , z ( t ) ] P(t) [x(t), y(t), z(t)] P(t)[x(t),y(t),z(t)] 其中( x(t) ), ( y(t) ), ( z(t) ) 都是参数t的三次多项式 x ( t ) a x t 3 b x t 2 c x t d x ; y ( t ) a y t 3 b y t 2 c y t d y ; z ( t ) a z t 3 b z t 2 c z t d z ; 其中 t 的含义为当前点距离分段起始点的距离。 x(t) a_x t^3 b_x t^2 c_x t d_x; \\ y(t) a_y t^3 b_y t^2 c_y t d_y;\\ z(t) a_z t^3 b_z t^2 c_z t d_z;\\ 其中t的含义为当前点距离分段起始点的距离。 x(t)axt3bxt2cxtdx;y(t)ayt3byt2cytdy;z(t)azt3bzt2cztdz;其中t的含义为当前点距离分段起始点的距离。
1.2.2.边界条件
为了确定这些系数( a ), ( b ), ( c ), ( d )通常需要一些边界条件。常见的边界条件包括
1.曲线通过控制点在每个控制点处t的值设为0或1确保曲线通过这些点。
2.平滑性对每个分段函数而言在区间内二阶连续可导。不同分段函数在邻接点上一阶导数二阶导数连续。
1.2.3.实际例子
假设现有 1. P 0 , . . . , P n − 1 共 n 个点。满足相邻的点不重合。 2. P 0 处各个轴关于弧长一阶导数也是已知的设为 P 0 ′ . x P 0 ′ . y P 0 ′ . z 。 3. P n − 1 处各个轴关于弧长一阶导数也是已知的设为 P n − 1 ′ . x P n − 1 ′ . y P n − 1 ′ . z 。 1.P_{0},...,P_{n-1}共n个点。满足相邻的点不重合。\\ 2.P_{0}处各个轴关于弧长一阶导数也是已知的设为P_{0}.xP_{0}.yP_{0}.z。\\ 3.P_{n-1}处各个轴关于弧长一阶导数也是已知的设为P_{n-1}.xP_{n-1}.yP_{n-1}.z。 1.P0,...,Pn−1共n个点。满足相邻的点不重合。2.P0处各个轴关于弧长一阶导数也是已知的设为P0′.xP0′.yP0′.z。3.Pn−1处各个轴关于弧长一阶导数也是已知的设为Pn−1′.xPn−1′.yPn−1′.z。 要求依据上述条件求取每一段上以弧长为参数的曲线的三次参数方程。
分析 对第 i 段三次样条函数而言其形式必然为 对 x i ( t ) : x i ( t ) a x i b x i t c x i t 2 d x i t 3 ; 0 t L e n i ; 其中 L e n i 是此段终点到起点的距离。我们只需分别求出 a x i , b x i , c x i , d x i 即可。 对 y i ( t ) y i ( t ) a y i b y i t c y i t 2 d y i t 3 ; 0 t L e n i ; 其中 L e n i 是此段终点到起点的距离。我们只需分别求出 a y i , b y i , c y i , d y i 即可。 对 z i ( t ) z i ( t ) a z i b z i t c z i t 2 d z i t 3 ; 0 t L e n i ; 其中 L e n i 是此段终点到起点的距离。我们只需分别求出 a z i , b z i , c z i , d z i 即可。 我们一下仅分析 x i ( t ) 方程各个系数的求解 y i ( t ) z i ( t ) 类似可得。 对第i段三次样条函数而言其形式必然为\\ 对x_{i}(t):\\ x_{i}(t) ax_{i}bx_{i}tcx_{i}t^2dx_{i}t^3; 0tLen_{i};\\ 其中Len_{i}是此段终点到起点的距离。我们只需分别求出ax_{i},bx_{i},cx_{i},dx_{i}即可。\\ 对y_{i}(t)\\ y_{i}(t) ay_{i}by_{i}tcy_{i}t^2dy_{i}t^3; 0tLen_{i};\\ 其中Len_{i}是此段终点到起点的距离。我们只需分别求出ay_{i},by_{i},cy_{i},dy_{i}即可。\\ 对z_{i}(t)\\ z_{i}(t) az_{i}bz_{i}tcz_{i}t^2dz_{i}t^3; 0tLen_{i};\\ 其中Len_{i}是此段终点到起点的距离。我们只需分别求出az_{i},bz_{i},cz_{i},dz_{i}即可。\\ 我们一下仅分析x_{i}(t)方程各个系数的求解y_{i}(t)z_{i}(t)类似可得。 对第i段三次样条函数而言其形式必然为对xi(t):xi(t)axibxitcxit2dxit3;0tLeni;其中Leni是此段终点到起点的距离。我们只需分别求出axi,bxi,cxi,dxi即可。对yi(t)yi(t)ayibyitcyit2dyit3;0tLeni;其中Leni是此段终点到起点的距离。我们只需分别求出ayi,byi,cyi,dyi即可。对zi(t)zi(t)azibzitczit2dzit3;0tLeni;其中Leni是此段终点到起点的距离。我们只需分别求出azi,bzi,czi,dzi即可。我们一下仅分析xi(t)方程各个系数的求解yi(t)zi(t)类似可得。 通过 x i ( 0 ) P i . x x i ; 可得 a x i x i ; 通过x_{i}(0)P_{i}.xx_{i};可得\\ ax_{i}x_{i}; 通过xi(0)Pi.xxi;可得axixi; 2. 通过 X i ( L e n i ) x i 1 ; 可得 b x i ( x i 1 − x i ) / L e n i − L e n i ∗ ( M i 1 . x / 6 M i . x / 3 ) ; 通过X_{i}(Len_{i})x_{i1};可得\\ bx_{i}(x_{i1}-x_{i})/Len_{i}-Len_{i}*(M_{i1}.x/6M_{i}.x/3); 通过Xi(Leni)xi1;可得bxi(xi1−xi)/Leni−Leni∗(Mi1.x/6Mi.x/3); 3. 通过 x i ′ ′ ( 0 ) M i . x ; 可得 c x i M i . x / 2 ; 通过x_{i}(0)M_{i}.x;可得\\ cx_{i}M_{i}.x/2; 通过xi′′(0)Mi.x;可得cxiMi.x/2; 4. 通过 x i ′ ′ ( L e n i ) M i 1 . x ; 可得 d x i ( M i 1 . x − M i . x ) / ( 6 ∗ L e n i ) ; 通过x_{i}(Len_{i})M_{i1}.x;可得\\ dx_{i}(M_{i1}.x-M_{i}.x)/(6*Len_{i}); 通过xi′′(Leni)Mi1.x;可得dxi(Mi1.x−Mi.x)/(6∗Leni); 在上述我们假设已经知道 n 个顶点处 x y z 关于弧长参数的二阶导数。记为 M i . x M i . y M i . z ; n个顶点处xyz关于弧长参数的二阶导数。记为M_{i}.xM_{i}.yM_{i}.z; n个顶点处xyz关于弧长参数的二阶导数。记为Mi.xMi.yMi.z; 下面分析各个顶点处各个轴关于弧长参数二阶导数的求取。 通过 X i ′ ( L e n i ) x i 1 ′ 0 可得 M i . x ∗ L e n i / 6 M i 1 . x ∗ ( L e n i 1 L e n i ) / 3 M i 2 . x ∗ ( L e n i 1 / 6 ) ( x i 2 − x i 1 ) / L e n i 1 − ( x i 1 − x i ) / L e n i ; 通过X_{i}(Len_{i})x_{i1}{0}可得\\ M_{i}.x*Len_{i}/6M_{i1}.x*(Len_{i1}Len_{i})/3M_{i2}.x*(Len_{i1}/6)\\ (x_{i2}-x_{i1})/Len_{i1}-(x_{i1}-x_{i})/Len_{i}; 通过Xi′(Leni)xi1′0可得Mi.x∗Leni/6Mi1.x∗(Leni1Leni)/3Mi2.x∗(Leni1/6)(xi2−xi1)/Leni1−(xi1−xi)/Leni; 上述共可构成n-2个线性方程。为了求解n个自变量我们还需要两个。 通过提供 x 0 ′ ( 0 ) 可得 M 0 . x ∗ ( − L e n 0 / 3 ) M 1 . x ∗ ( − L e n 0 / 6 ) x 0 ′ ( 0 ) − ( x 1 − x 0 ) / L e n 0 ; 通过提供x_{0}(0)可得\\ M_{0}.x*(-Len_{0}/3)M_{1}.x*(-Len_{0}/6)x_{0}(0)-(x_{1}-x_{0})/Len_{0}; 通过提供x0′(0)可得M0.x∗(−Len0/3)M1.x∗(−Len0/6)x0′(0)−(x1−x0)/Len0; 3. 通过提供 x n − 2 ′ ( L e n n − 2 ) 可得 M n − 2 . x ∗ ( L e n n − 2 / 6 ) M n − 1 . x ∗ ( L e n n − 2 / 3 ) x n − 2 ′ ( L e n n − 2 ) − ( x n − 1 − x n − 2 ) / L e n n − 2 ; 通过提供x_{n-2}(Len_{n-2})可得\\ M_{n-2}.x*(Len_{n-2}/6)M_{n-1}.x*(Len_{n-2}/3)\\ x_{n-2}(Len_{n-2})-(x_{n-1}-x_{n-2})/Len_{n-2}; 通过提供xn−2′(Lenn−2)可得Mn−2.x∗(Lenn−2/6)Mn−1.x∗(Lenn−2/3)xn−2′(Lenn−2)−(xn−1−xn−2)/Lenn−2; 这样我们构建了n个线性等式。这n个线性等式可以用矩阵形式表示为 A n , n M n , 1 D n , 1 ; M n , 1 A n , n − 1 D n , 1 ; A_{n,n}M_{n,1}D_{n,1};\\ M_{n,1}A^{-1}_{n,n}D_{n,1}; An,nMn,1Dn,1;Mn,1An,n−1Dn,1; 这样我们通过先求取A的逆矩阵接着便可求出M。然后依据前述求取系数的方法便可唯一确定每一段x关于弧长的三次参数曲线方程。每一段yz关于弧长的三次参数曲线方程类似可得。