当前位置: 首页 > news >正文

三次插值曲线--插值技术

三次插值曲线

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_{i+1}] ) 上是三次多项式。

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_{i+1}(x_i) );\\ ( S'_i(x_i) = S'_{i+1}(x_i) );\\ ( S''_i(x_i) = S''_{i+1}(x_i) ); (Si(xi)=Si+1(xi));(Si(xi)=Si+1(xi));(Si′′(xi)=Si+1′′(xi));
3.边界条件:通常有两种边界条件,自然边界(Natural)和固定边界(Clamped)。自然边界指在曲线两端,二阶导数为零,即 ( S’‘_0(x_0) = S’'_n(x_n) = 0 )。固定边界则需要指定曲线两端的斜率。

1.1.2.插值公式

对于区间 ( [x_i, x_{i+1}] ) 上的曲线段 ( 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 y=S_i(x) = a_i + b_i(x - x_i) + c_i(x - x_i)^2 + d_i(x - x_i)^3 y=Si(x)=ai+bi(xxi)+ci(xxi)2+di(xxi)3
其中,( a_i, b_i, c_i, d_i ) 是系数,需要通过以下条件确定:

1.对每个S_i(x),其必过型值点P_i, P_{i+1}。

2.对排除首个,末个型值点的每个中间型值点,这些型值点分别位于两个分段函数上。

两个分段函数在此类型值点上一阶导数,二阶导数连续。

3.边界条件。如限定P_0,P_n处二阶导数为0,或指定P__0,P_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,...,Pn1n个二维点。对Pi其坐标为(xi,yi)。满足x0<...<xn12.给定P0处一阶导数y0,给定Pn1处一阶导数yn1
要求依据以上信息给出从
P 0 到 P n − 1 的共 n − 1 段三次样条曲线的曲线方程。 P_0到P_{n-1}的共n-1段三次样条曲线的曲线方程。 P0Pn1的共n1段三次样条曲线的曲线方程。
分析:
对第 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})^2+d_{i}(x-x_{i})^3 x_{i}<=x<x_{i+1};\\ 我们只需分别求出a_{i},b_{i},c_{i},d_{i}即可。 对第i段三次样条函数而言,其形式必然为:y=si(x)=ai+bi(xxi)+ci(xxi)2+di(xxi)3xi<=x<xi+1;我们只需分别求出ai,bi,ci,di即可。
1.
通过 y = s i ( x i ) = y i ,可得: a i = y i ; 通过y=s_{i}(x_{i})=y_{i},可得: a_{i} = y_{i}; 通过y=si(xi)=yi,可得:ai=yi;
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。则有:ci=Mi/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_{i+1})=S''_{i+1}(x_{i+1})可得:d_{i}=(M_{i+1}-M_{i})/[6(x_{i+1}-x_{i})]; 通过Si′′(xi+1)=Si+1′′(xi+1)可得:di=(Mi+1Mi)/[6(xi+1xi)];
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_{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] 通过Si(xi+1)=Si+1(xi+1)可得:bi=(yi+1yi)/(xi+1xi)(xi+1xi)[Mi+1/6+Mi/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,...,Mn1便可求出ai,bi,ci,di进而唯一确定每一段的三次样条曲线函数。下面分析如何求取M0,...,Mn1
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_{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个变量,我们还需要两个。 通过Si(xi+1)=Si+1(xi+1),可得:Mi[(xi+1xi)/6]+Mi+1[(xi+2xi)/3]+Mi+2[(xi+2xi+1)/6]=(yi+2yi+1)/(xi+2xi+1)(yi+1yi)/(xi+1xi);上述共有n2个线性方程。为了依赖线性方程组求解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[(x1x0)/3]+M1[(x1x0)/6]=(y1y0)/(x1x0);
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}); 通过yn1=Sn2(xn1)可得:Mn2[(xn1xn2)/6]+Mn1[(xn1xn2)/3]=yn1(yn1yn2)/(xn1xn2);
这样,我们构建了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,1=Dn,1;Mn,1=An,n1Dn,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)=axt3+bxt2+cxt+dx;y(t)=ayt3+byt2+cyt+dy;z(t)=azt3+bzt2+czt+dz;其中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}.x,P'_{0}.y,P'_{0}.z。\\ 3.P_{n-1}处各个轴关于弧长一阶导数也是已知的,设为P'_{n-1}.x,P'_{n-1}.y,P'_{n-1}.z。 1.P0,...,Pn1n个点。满足相邻的点不重合。2.P0处各个轴关于弧长一阶导数也是已知的,设为P0.xP0.yP0.z3.Pn1处各个轴关于弧长一阶导数也是已知的,设为Pn1.xPn1.yPn1.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}t+cx_{i}t^2+dx_{i}t^3; 0<=t<Len_{i};\\ 其中Len_{i}是此段终点到起点的距离。我们只需分别求出ax_{i},bx_{i},cx_{i},dx_{i}即可。\\ 对y_{i}(t):\\ y_{i}(t) = ay_{i}+by_{i}t+cy_{i}t^2+dy_{i}t^3; 0<=t<Len_{i};\\ 其中Len_{i}是此段终点到起点的距离。我们只需分别求出ay_{i},by_{i},cy_{i},dy_{i}即可。\\ 对z_{i}(t):\\ z_{i}(t) = az_{i}+bz_{i}t+cz_{i}t^2+dz_{i}t^3; 0<=t<Len_{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)=axi+bxit+cxit2+dxit3;0<=t<Leni;其中Leni是此段终点到起点的距离。我们只需分别求出axi,bxi,cxi,dxi即可。yi(t)yi(t)=ayi+byit+cyit2+dyit3;0<=t<Leni;其中Leni是此段终点到起点的距离。我们只需分别求出ayi,byi,cyi,dyi即可。zi(t)zi(t)=azi+bzit+czit2+dzit3;0<=t<Leni;其中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}.x=x_{i};可得:\\ ax_{i}=x_{i}; 通过xi(0)=Pi.x=xi;可得:axi=xi;
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_{i+1};可得:\\ bx_{i}=(x_{i+1}-x_{i})/Len_{i}-Len_{i}*(M_{i+1}.x/6+M_{i}.x/3); 通过Xi(Leni)=xi+1;可得:bxi=(xi+1xi)/LeniLeni(Mi+1.x/6+Mi.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;可得:cxi=Mi.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_{i+1}.x;可得:\\ dx_{i}=(M_{i+1}.x-M_{i}.x)/(6*Len_{i}); 通过xi′′(Leni)=Mi+1.x;可得:dxi=(Mi+1.xMi.x)/(6Leni);
在上述我们假设已经知道:
n 个顶点处 x , y , z 关于弧长参数的二阶导数。记为 M i . x , M i . y , M i . z ; n个顶点处x,y,z关于弧长参数的二阶导数。记为M_{i}.x,M_{i}.y,M_{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'_{i+1}{0},可得:\\ M_{i}.x*Len_{i}/6+M_{i+1}.x*(Len_{i+1}+Len_{i})/3+M_{i+2}.x*(Len_{i+1}/6)=\\ (x_{i+2}-x_{i+1})/Len_{i+1}-(x_{i+1}-x_{i})/Len_{i}; 通过Xi(Leni)=xi+10,可得:Mi.xLeni/6+Mi+1.x(Leni+1+Leni)/3+Mi+2.x(Leni+1/6)=(xi+2xi+1)/Leni+1(xi+1xi)/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)(x1x0)/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}; 通过提供xn2(Lenn2),可得:Mn2.x(Lenn2/6)+Mn1.x(Lenn2/3)=xn2(Lenn2)(xn1xn2)/Lenn2;
这样,我们构建了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,1=Dn,1;Mn,1=An,n1Dn,1;
这样,我们通过先求取A的逆矩阵,接着便可求出M。然后依据前述求取系数的方法,便可唯一确定每一段x关于弧长的三次参数曲线方程。每一段y,z关于弧长的三次参数曲线方程类似可得。

相关文章:

三次插值曲线--插值技术

三次插值曲线 1.1.三次样条曲线 三次样条曲线的基本思想是&#xff0c;在给定的一系列点&#xff08;称为控制点或数据点&#xff09;之间&#xff0c;通过一系列三次多项式曲线段来拟合这些点&#xff0c;使得整个曲线既平滑又准确地通过所有控制点。 1.1.1.数学定义 给定…...

python循环结构

1.while 循环 语句&#xff1a; while 循环条件表达式&#xff1a; 代码块 else&#xff1a; 代码块 小练&#xff1a; 设计一百以内的偶数相加 n 0 while n < 100:n 1if n % 2 0 :print(n) 判断是不是闰年&#xff08;四年一润和百年不润&#xff0c;或者四百年一润&am…...

深入理解Netty的Pipeline机制:原理与实践详解

深入理解Netty的Pipeline机制&#xff1a;原理与实践详解 Netty是一个基于Java的高性能异步事件驱动的网络应用框架&#xff0c;广泛应用于高并发网络编程。&#xff08;学习netty请参考&#xff1a;深入浅出Netty&#xff1a;高性能网络应用框架的原理与实践&#xff09;Nett…...

直方图均衡化示例

禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》 图3-17...

私域电商新纪元:消费增值模式的创新与成功实践

大家好&#xff0c;我是吴军&#xff0c;很高兴能够与您分享私域电商领域的魅力与机遇。今天&#xff0c;我将为大家呈现一个令人瞩目的成功案例&#xff0c;这个案例充分展现了私域电商的巨大潜力和无限可能。 在短短一个月的时间里&#xff0c;我们的客户成功实现了业绩的飞跃…...

Java——IO流(一)-(6/8):字节流-FileInputStream 每次读取多个字节(示例演示)、一次读取完全部字节(方式一、方式二,注意事项)

目录 文件字节输入流&#xff1a;每次读取多个字节 实例演示 注意事项 文件字节输入流&#xff1a;一次读取完全部字节 方式一 方式二 注意事项 文件字节输入流&#xff1a;每次读取多个字节 用到之前介绍过的常用方法&#xff1a; 实例演示 需求&#xff1a;用每次读取…...

服务器SSH 免密码登录

1. 背景 为了服务器的安全着想&#xff0c;设置的服务器密钥非常长。但是这导致每次连接服务器都需要输入一长串的密码&#xff0c;把人折腾的很痛苦&#xff0c;所以我就在想&#xff0c;能不能在终端SSH的时候无需输入密码。 windows 可以使用 xshell 软件&#xff0c;会自…...

Linux安装MySQL以及远程连接

1、Linux安装MySQL 1.1、准备解压包 MySQL5.x解压包 提取码&#xff1a;9y7n 1.2、通过rpm脚本安装 切记安装顺序&#xff1a;common --> libs --> client --> server 因为它们之间存在依赖关系&#xff0c;所以务必按照顺序安装 安装前请确保当前目录/文…...

SQL Server 数据库分页技术详解:选择最佳方法优化查询性能”。

当今数据驱动的应用程序中&#xff0c;数据库分页技术在优化查询性能和提升用户体验中扮演着重要角色。在 SQL Server 环境下&#xff0c;开发者面对大数据集时&#xff0c;常常需要选择合适的分页方法以平衡功能需求和性能优化。本文将详细介绍 SQL Server 中几种主要的分页技…...

electron录制-镜头缩放、移动

要求 1、当录屏过程中&#xff0c;鼠标点击&#xff0c;镜头应该往点击处拉近&#xff0c;等一段时间还原 2、录屏过程中&#xff0c;可能会发生多次点击&#xff0c;但是点击位置偏差大&#xff0c;可能会导致缩放之后&#xff0c;画面没出来&#xff0c;因此需要移动镜头帧 …...

红队内网攻防渗透:内网渗透之内网对抗:信息收集篇自动项目本机导出外部打点域内通讯PillagerBloodHound

红队内网攻防渗透 1. 内网自动化信息收集1.1 本机凭据收集类1.1.1、HackBrowserData 快速获取浏览器的账户密码1.1.2、Searchall 快速搜索服务器中的有关敏感信息还有浏览器的账户密码1.1.3、Pillager 适用于后渗透期间的信息收集工具,可以收集目标机器上敏感信息1.2 对外打点…...

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发&#xff08;发布&#xff09;-SelectCamelWords[选中驼峰单词]&#xff08;idea源代码&#xff09; 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址&#xff1a;https://github.com/yangfeng…...

【网络安全】网络安全基础精讲 - 网络安全入门第一篇

目录 一、网络安全基础 1.1网络安全定义 1.2网络系统安全 1.3网络信息安全 1.4网络安全的威胁 1.5网络安全的特征 二、入侵方式 2.1黑客 2.1.1黑客入侵方式 2.1.2系统的威胁 2.2 IP欺骗 2.2.1 TCP等IP欺骗 2.2.2 IP欺骗可行的原因 2.3 Sniffer探测 2.4端口扫描技术…...

初识 GPT-4 和 ChatGPT

文章目录 LLM 概述理解 Transformer 架构及其在 LLM 中的作用解密 GPT 模型的标记化和预测步骤 想象这样⼀个世界&#xff1a;在这个世界里&#xff0c;你可以像和朋友聊天⼀样快速地与计算机交互。那会是怎样的体验&#xff1f;你可以创造出什么样的应用程序&#xff1f;这正是…...

【C语言】解决C语言报错:Array Index Out of Bounds

文章目录 简介什么是Array Index Out of BoundsArray Index Out of Bounds的常见原因如何检测和调试Array Index Out of Bounds解决Array Index Out of Bounds的最佳实践详细实例解析示例1&#xff1a;访问负索引示例2&#xff1a;访问超出上限的索引示例3&#xff1a;循环边界…...

【C++】一个极简但完整的C++程序

一、一个极简但完整的C程序 我们编写程序是为了解决问题和任务的。 1、任务&#xff1a; 某个书店将每本售出的图书的书名和出版社&#xff0c;输入到一个文件中&#xff0c;这些信息以书售出的时间顺序输入&#xff0c;每两周店主会手工计算每本书的销售量、以及每个出版社的…...

Lua迭代器详解(附加红点功能实例)

Lua迭代器详解与用法 1. 什么是迭代器2. 为什么需要理解迭代器的原理3. 迭代器的实现0. 闭包1. 有状态迭代器2. 无状态迭代器 4. 红点树系统基础 1. 什么是迭代器 迭代器是一种能让我们遍历一个集合中的所有元素的代码结构。比如常用ipairs()和pairs()。 2. 为什么需要理解迭代…...

锂磷硫(LPS)属于硫化物固态电解质 Li7P3S11是代表性产品

锂磷硫&#xff08;LPS&#xff09;属于硫化物固态电解质 Li7P3S11是代表性产品 锂磷硫&#xff08;LPS&#xff09;&#xff0c;为非晶态材料&#xff0c;是硫化物固态电解质代表性产品之一&#xff0c;具有热稳定性好、成本较低等优点&#xff0c;在固态电解质中离子电导率较…...

PointCloudLib 点云边缘点提取 C++版本

0.实现效果 1.算法原理 PCL(Point Cloud Library)中获取点云边界的算法主要基于点云数据的几何特征和法向量信息。以下是对该算法的详细解释,按照清晰的格式进行归纳: 算法概述 PCL中的点云边界提取算法主要用于从3D点云数据中识别并提取出位于物体边界上的点。这些边界…...

【Qt】QList<QVariantMap>中数据修改

1. 问题 QList<QVariantMap> 类型中&#xff0c;修改QVariantMap中的值。 2. 代码 //有效代码1QVariantMap itemMap itemList.at(0);itemMap.insert("title", "test");itemList.replace(0, itemMap);//有效代码 2itemList.operator [](0).insert(…...

如何避免vue的url中使用hash符号?

目录 1. 安装 Vue Router 2. 配置 Vue Router 使用 history 模式 3. 更新 main.js 4. 配置服务器以支持 history 模式&#xff08;此处需要仔细测试&#xff09; a. Nginx 配置 b. Apache 配置 5. 部署并测试 总结 在 Vue.js 项目中&#xff0c;避免 URL 中出现 # 符号的…...

Java学习 - MySQL存储过程、函数和触发器练习实例

存储过程 存储过程是什么 存储过程是一组已经编译好的SQL语句存储过程优点有什么 安全 性能高 提高代码复用性创建存储过程的语法 DELIMITER $ # 不能加分号CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型) BEGIN存储过程语句块 END;$DELIMITER ;创建一个无参的存储…...

【深度神经网络 (DNN)】

深度神经网络 (DNN) 深度神经网络 (DNN) 是机器学习领域中一种强大的工具&#xff0c;它由多层神经元组成&#xff0c;能够学习复杂的数据模式&#xff0c;解决各种任务&#xff0c;如图像识别、语音识别、自然语言处理等。 DNN 的构成&#xff1a; 神经元: DNN 的基本单元&…...

ES全文检索支持繁简和IK分词检索

ES全文检索支持繁简和IK分词检索 1. 前言2. 引入繁简转换插件analysis-stconvert2.1 下载已有作者编译后的包文件2.2 下载源码进行编译2.3 复制解压插件到es安装目录的plugins文件夹下 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4…...

解决Visual Studio Code在Ubuntu上崩溃的问题

解决Visual Studio Code在Ubuntu上崩溃的问题 我正在使用Ubuntu系统&#xff0c;每次打开Visual Studio Code时&#xff0c;只能短暂打开一秒钟&#xff0c;然后就会崩溃。当通过终端使用code --verbose命令启动Visual Studio Code时&#xff0c;出现以下错误信息&#xff1a;…...

【OpenGauss源码学习 —— (ALTER TABLE(SET attribute_option))】

ALTER TABLE&#xff08;SET attribute_option&#xff09; ATExecSetOptions 函数 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用来源。…...

Elasticsearch 数据提取 - 最适合这项工作的工具是什么?

作者&#xff1a;来自 Elastic Josh Asres 了解在 Elasticsearch 中为你的搜索用例提取数据的所有不同方式。 对于搜索用例&#xff0c;高效采集和处理来自各种来源的数据的能力至关重要。无论你处理的是 SQL 数据库、CRM 还是任何自定义数据源&#xff0c;选择正确的数据采集…...

‘浔川画板v5.1’即将上线!——浔川python社

1 简介&#xff1a; 浔川画板是一款专业的数字绘画和漫画创作软件&#xff0c;它为艺术家和设计师提供了丰富的绘画工具、色彩管理功能以及易于使用的界面。用户可以使用浔川画板进行手绘风格的绘画、精细的素描、漫画分格、UI设计等多种创作。该软件支持多种笔刷和特效&#…...

RockChip Android12 System之Datetime

一:概述 本文将针对Android12 Settings二级菜单System中Date&time的UI修改进行说明。 二:Date&Time 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name="Settings$DateTimeSettingsActivity"android:label="@stri…...

详解 ClickHouse 的副本机制

一、简介 副本功能只支持 MergeTree Family 的表引擎&#xff0c;参考文档&#xff1a;https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ ClickHouse 副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#…...

速卖通测评成本低见效快,自养号测评的实操指南,快速积累销量和好评

对于初入速卖通的新卖家而言&#xff0c;销量和评价的积累显得尤为关键。由于新店铺往往难以获得平台活动的青睐&#xff0c;因此流量的获取成为了一大挑战。在这样的背景下&#xff0c;进行产品测评以积累正面的用户反馈和销售记录&#xff0c;成为了提升店铺信誉和吸引潜在顾…...

php反序列化漏洞简介

目录 php序列化和反序列化简介 序列化 反序列化 类中定义的属性 序列化实例 反序列化实例 反序列化漏洞 序列化返回的字符串格式 魔术方法和反序列化利用 绕过wakeup 靶场实战 修复方法 php序列化和反序列化简介 序列化 将对象状态转换为可保持或可传输的格式的…...

力扣随机一题 模拟+字符串

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 1910.删除一个字符串中所有出现的给定子字符串【中等】 题目&#xff1a; …...

java-正则表达式 1

Java中的正则表达式 1. 正则表达式的基本概念 正则表达式&#xff08;Regular Expression, regex&#xff09;是一种用于匹配字符串中字符组合的模式。正则表达式广泛应用于字符串搜索、替换和解析。Java通过java.util.regex包提供了对正则表达式的支持&#xff0c;该包包含两…...

Python xlrd库:读excel表格

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

开发中遇到的一个bug

遇到的报错信息是这样的&#xff1a; java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [hm-api,hm-common,hm-service] are excluded from annotation processing 翻译过来就是存在循环引用的情况&#xff0c;导…...

Java面试题:对比不同的垃圾收集器(如Serial、Parallel、CMS、G1)及其适用场景

Java虚拟机&#xff08;JVM&#xff09;提供了多种垃圾收集器&#xff0c;每种垃圾收集器在性能和适用场景上各有不同。以下是对几种常见垃圾收集器&#xff08;Serial、Parallel、CMS、G1&#xff09;的对比及其适用场景的详细介绍&#xff1a; 1. Serial 垃圾收集器 Serial…...

每日一题——冒泡排序

C语言——冒泡排序 冒泡排序练习 前言&#xff1a;CSDN的小伙伴们&#xff0c;大家好&#xff01;今天我来给大家分享一种解题思想——冒泡排序。 冒泡排序 冒泡法的核心思想&#xff1a;两两相邻的元素进行比较 2.冒泡排序的算法描述如下。 (1)比较相邻的元素。如果第一 个比…...

javascript浏览器对象模型

BOM对象&#xff1a; BOM 是浏览器对象模型的简称。JavaScript 将整个浏览器窗口按照实现的功能不同拆分成若干个对象&#xff1b; 包含&#xff1a;window 对象、history 对象、location 对象和 document 对象等 window对象&#xff1a; 常用方法&#xff1a; 1.prompt();…...

C语言之链表以及单链表的实现

一&#xff1a;链表的引入 1&#xff1a;从数组的缺陷说起 &#xff08;1&#xff09;数组有两个缺陷。一个是数组中所有元素类型必须一致&#xff0c;第二是数组的元素个数必须事先指定并且一旦指定后不能更改 &#xff08;2&#xff09;如何解决数组的两个缺陷&#xff1a;数…...

AI在线免费视频工具2:视频配声音;图片说话hedra

1、视频配声音 https://deepmind.google/discover/blog/generating-audio-for-video/ https://www.videotosoundeffects.com/ &#xff08;免费在线使用&#xff09; 2、图片说话在线图片生成播报hedra hedra 上传音频与图片即可合成 https://www.hedra.com/ https://www.…...

Elastic字段映射(_source,doc_value,fileddata,index,store)

Elastic字段映射&#xff08;_source,doc_value,filed_data,index,store&#xff09; _source&#xff1a; source 字段用于存储 post 到 ES 的原始 json 文档。为什么要存储原始文档呢&#xff1f;因为 ES 采用倒排索引对文本进行搜索&#xff0c;而倒排索引无法存储原始输入…...

kotlin空类型安全 !! ?. ?:

1、定义可空类型 fun main(){// 定义可空类型var x:String? "hello"x null } 2、!! 强转类型 定义可空类型之后&#xff0c;如果使用其内置方法&#xff0c;编译不会通过&#xff0c;因为值有可能为null&#xff0c;可以使用 !! 把类型强转为不可空&#xff1a…...

通过 WireGuard 组建虚拟局域网 实现多个局域网全互联

本文后半部分代码框较多,欢迎点击原文链接获得更佳的阅读体验。 前言 上一篇关于 WireGuard 的文章通过 Docker 安装 wg-easy 的形式来使用 WireGuard,但 wg-easy 的功能比较有限,并不能发挥出 WireGuard 的全部功力。 如果只是想要出门在外连随时随地的连回家里的局域网,…...

qmt量化交易策略小白学习笔记第47期【qmt编程之期货仓单】

qmt编程之获取期货数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 期货仓单 提示 1…...

点云处理中阶 Sampling

目录 一、什么是点云Sampling 二、示例代码 1、下采样 Downsampling 2、均匀采样 3、上采样 4、表面重建 一、什么是点云Sampling 点云处理中的采样(sampling)是指从大量点云数据中选取一部分代表性的数据点,以减少计算复杂度和内存使用,同时保留点云的几何特征和重…...

为什么print语句被Python3遗弃?

在开发和维护python项目的时候发现经常有print语句报错&#xff0c;原因是python3放弃了print语句 print 语句 早就被列在了不可靠的语言特性列表中&#xff0c;例如 Guido 的“Python 之悔”&#xff08;Python Regrets&#xff09;演讲【1】&#xff0c;并计划在 Python 300…...

067、Python 高阶函数的编写:优质冒泡排序

以下写了个简单的冒泡排序函数&#xff1a; def bubble_sort(items: list) -> list:for i in range(1, len(items)):swapped Falsefor j in range(0, len(items) - 1):if items[j] > items[j 1]:items[j], items[j 1] items[j 1], items[j]swapped Trueif not swa…...

【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、Python简介1.1 历史背景1.2 设计哲学1.3 语言特性1.4 应用场景1.5 为什么选择Python 二、Python语言基础2.1 注释规则2.1.1 单行注释2.1.2 多行注释2.1.3 文件编码声明注释 2.2 代码缩进2.3 编码规范2.3.1 命名规范…...

AI学习指南机器学习篇-KNN的优缺点

AI学习指南机器学习篇-KNN的优缺点 在机器学习领域中&#xff0c;K最近邻&#xff08;K-Nearest Neighbors&#xff0c;KNN&#xff09;算法是一种十分常见的分类和回归方法之一。它的原理简单易懂&#xff0c;但在实际应用中也存在一些优缺点。本文将重点探讨KNN算法的优缺点…...