B样条曲线曲面--拟合技术

B样条曲线曲面

1.B样条曲线

B样条曲线(B-spline curve)是一种在计算机图形学和计算几何中广泛使用的参数曲线。它是贝塞尔曲线(Bezier curve)的一种推广,提供了更好的局部控制能力。B样条曲线由一组控制点(也称为控制顶点)和一组基函数(称为B样条基函数)定义。

1.1.B样条曲线的定义

给定一组 ( n + 1 ) 个控制点 ( P i ) 和一组节点( k n o t s ) ( U = { u 0 , u 1 , . . . , u m } ) , 其中 ( m = n + k + 1 ) , ( k ) 是 B 样条的次数, B 样条曲线 ( C ( u ) ) 可以定义为: 给定一组 (n+1) 个控制点 (P_i) 和一组节点(knots) (U = \{u_0, u_1, ..., u_m\}) ,\\ 其中 (m = n + k + 1) , (k) 是B样条的次数,B样条曲线 (C(u)) 可以定义为: 给定一组(n+1)个控制点(Pi)和一组节点(knots(U={u0,u1,...,um})其中(m=n+k+1)(k)B样条的次数,B样条曲线(C(u))可以定义为:

C ( u ) = ∑ i = 0 n N i , k ( u ) P i C(u) = \sum_{i=0}^{n} N_{i,k}(u) P_i C(u)=i=0nNi,k(u)Pi

其中 ( N i , k ( u ) ) 是第 ( i ) 个 ( k ) 次 B 样条基函数,定义如下: 其中 (N_{i,k}(u)) 是第 (i) 个 (k) 次B样条基函数,定义如下: 其中(Ni,k(u))是第(i)(k)B样条基函数,定义如下:

N i , 0 ( u ) = { 1 if  u i ≤ u < u i + 1 0 otherwise N_{i,0}(u) = \begin{cases} 1 & \text{if } u_i \leq u < u_{i+1} \\ 0 & \text{otherwise} \end{cases} Ni,0(u)={10if uiu<ui+1otherwise

N i , k ( u ) = u − u i u i + k − u i N i , k − 1 ( u ) + u i + k + 1 − u u i + k + 1 − u i + 1 N i + 1 , k − 1 ( u ) 约定 0 / 0 = 0 ; N_{i,k}(u) = \frac{u - u_i}{u_{i+k} - u_i} N_{i,k-1}(u) + \frac{u_{i+k+1} - u}{u_{i+k+1} - u_{i+1}} N_{i+1,k-1}(u)\\ 约定0/0=0; Ni,k(u)=ui+kuiuuiNi,k1(u)+ui+k+1ui+1ui+k+1uNi+1,k1(u)约定0/0=0;

其中 N i , k ( u ) 具备如下性质: 只在区间 [ t i , t i + k + 1 ] 上存在非 0 值。在其他区间必然为 0 。 在划分 T = [ t 0 , t 1 , . . . ] 时,若允许相邻 t 值相同,则可能出现递推计算分子,分母皆为 0 情况,此时认为 0 / 0 = 0 。 其中N_{i,k}(u)具备如下性质:\\ 只在区间[t_{i}, t_{i+k+1}]上存在非0值。在其他区间必然为0。\\ 在划分T=[t_0,t_{1},...]时,若允许相邻t值相同,则可能出现递推计算分子,分母皆为0情况,此时认为0/0=0。 其中Ni,k(u)具备如下性质:只在区间[ti,ti+k+1]上存在非0值。在其他区间必然为0在划分T=[t0,t1,...]时,若允许相邻t值相同,则可能出现递推计算分子,分母皆为0情况,此时认为0/0=0

1.1.1.基函数性质

B样条基函数(B-spline basis functions)是计算机图形学和数值分析中用以构造样条曲线和曲面的一种重要工具。它们具有以下性质:

  1. 非负性
    所有的 B 样条基函数在其定义域内都是非负的,即对于所有的 t 和所有的 i , B i , n ( t ) ≥ 0 。 所有的B样条基函数在其定义域内都是非负的,即对于所有的 t 和所有的 i,B_{i,n}(t) \geq 0。 所有的B样条基函数在其定义域内都是非负的,即对于所有的t和所有的iBi,n(t)0

  2. 局部支集性
    一个第 k 阶( k 次)的 B 样条基函数 B i , k ( t ) 只在区间 [ t i , t i + k + 1 ) 上有非零值, 推伸一下,给定一个 t 所在的区间,至多只有 k + 1 个基函数在此区间不为 0 , 这样,此区间内曲线至多只会受到 k + 1 个控制点的影响。 剔除前 k 个区间,后 k 个区间,剩余的每个区间内必然存在 k + 1 个基函数不为 0 , 相应的,这样区间内曲线由 k + 1 个对应的控制点所决定。 B 样条曲线一般只考虑这样的区间范围。 一个第 k 阶(k 次)的B样条基函数 B_{i,k}(t) 只在区间 [t_{i}, t_{i+k+1}) 上有非零值,\\ 推伸一下,给定一个t所在的区间,至多只有k+1个基函数在此区间不为0,\\ 这样,此区间内曲线至多只会受到k+1个控制点的影响。\\ 剔除前k个区间,后k个区间,剩余的每个区间内必然存在k+1个基函数不为0,\\ 相应的,这样区间内曲线由k+1个对应的控制点所决定。\\ B样条曲线一般只考虑这样的区间范围。 一个第k阶(k次)的B样条基函数Bi,k(t)只在区间[ti,ti+k+1)上有非零值,推伸一下,给定一个t所在的区间,至多只有k+1个基函数在此区间不为0这样,此区间内曲线至多只会受到k+1个控制点的影响。剔除前k个区间,后k个区间,剩余的每个区间内必然存在k+1个基函数不为0相应的,这样区间内曲线由k+1个对应的控制点所决定。B样条曲线一般只考虑这样的区间范围。

  3. 规范性
    在任何一个区间 [ t i , t i + 1 ) 上,所有的非零 B 样条基函数的和为 1 , 即 ∑ j = i − n i B j , n ( t ) = 1 。这个性质保证了曲线或曲面的平滑过渡。 在任何一个区间 [t_{i}, t_{i+1}) 上,所有的非零B样条基函数的和为1,\\ 即 \sum_{j=i-n}^{i} B_{j,n}(t) = 1。这个性质保证了曲线或曲面的平滑过渡。 在任何一个区间[ti,ti+1)上,所有的非零B样条基函数的和为1j=iniBj,n(t)=1。这个性质保证了曲线或曲面的平滑过渡。

  4. 递推关系:B样条基函数可以通过De Boor-Cox递推公式来定义,即:
    B i , 0 ( t ) = { 1 if  t i ≤ t < t i + 1 0 otherwise B_{i,0}(t) = \begin{cases} 1 & \text{if } t_i \leq t < t_{i+1} \\ 0 & \text{otherwise} \end{cases} Bi,0(t)={10if tit<ti+1otherwise

    B i , n ( t ) = t − t i t i + n − t i B i , n − 1 ( t ) + t i + n + 1 − t t i + n + 1 − t i + 1 B i + 1 , n − 1 ( t ) B_{i,n}(t) = \frac{t - t_i}{t_{i+n} - t_i} B_{i,n-1}(t) + \frac{t_{i+n+1} - t}{t_{i+n+1} - t_{i+1}} B_{i+1,n-1}(t) Bi,n(t)=ti+ntittiBi,n1(t)+ti+n+1ti+1ti+n+1tBi+1,n1(t)
    其中 n ≥ 1 。这个递推关系是构造 B 样条曲线和曲面的基础。 其中 n \geq 1。这个递推关系是构造B样条曲线和曲面的基础。 其中n1。这个递推关系是构造B样条曲线和曲面的基础。

  5. 连续性:B样条基函数的连续性取决于它的阶数和节点向量。通过选择合适的节点向量,可以控制曲线的光滑程度。

  6. 凸包性:B样条曲线或曲面总是位于其控制点的凸包内。这是由于规范性和非负性导致的。

  7. 变差缩减性:B样条曲线在任意直线上的交点数量不超过其控制点的交点数量,这保证了曲线的平滑性。

这些性质使得B样条基函数在设计和构造光滑曲线和曲面时非常有用,尤其是在计算机辅助设计(CAD)和计算机辅助制造(CAM)领域。B样条曲线和曲面的构造可以通过控制点、节点向量和基函数的组合来完成,从而实现对曲线和曲面形状的精确控制。

1.1.2.B样条曲线的特性

1.局部控制:改变一个控制点只会影响曲线的局部,不会影响整个曲线。

2.平滑性:B样条曲线具有很好的平滑性,尤其是当节点的分布均匀时。

3.灵活性:通过改变节点的分布和控制点的位置,可以灵活地调整曲线的形状。

4.闭合性:通过适当的节点设置,可以使曲线闭合。

1.1.2.节点的类型

  • 均匀B样条:节点值均匀分布,如 (u_i = i) 。

  • 非均匀B样条(NURBS):节点值非均匀分布,提供了更大的灵活性和精确的控制。

    B样条曲线是计算机辅助设计(CAD)和计算机图形学中的重要工具,广泛应用于曲线和曲面的建模。

1.2.二次B样条曲线

二次B样条曲线(Quadratic B-spline Curve)是计算机图形学和计算机辅助设计(CAD)中常用的一种曲线,它可以通过控制点来生成平滑的曲线。二次B样条曲线由一组二次多项式片段组成,每个片段都依赖于三个控制点。

定义

二次B样条曲线可以通过以下方式定义:

给定一组控制点 ( P 0 , P 1 , … , P n − 1 ) ,二次 B 样条曲线由以下参数方程表示: 给定一组控制点 ( P_0, P_1, \ldots, P_{n-1} ),二次B样条曲线由以下参数方程表示: 给定一组控制点(P0,P1,,Pn1),二次B样条曲线由以下参数方程表示:

C ( t ) = ∑ i = 0 n − 1 N i 2 ( t ) P i C(t) = \sum_{i=0}^{n-1} N_i^2(t) P_i C(t)=i=0n1Ni2(t)Pi

其中, ( N i 2 ( t ) ) 是二次 B 样条基函数,通常定义为: 其中,( N_i^2(t) ) 是二次B样条基函数,通常定义为: 其中,(Ni2(t))是二次B样条基函数,通常定义为:

N i 2 ( t ) = 1 2 ( 1 − t ) 2 δ i , 0 + t ( 1 − t ) δ i , 1 + 1 2 t 2 δ i , 2 N_i^2(t) = \frac{1}{2} (1 - t)^2 \delta_{i,0} + t(1 - t) \delta_{i,1} + \frac{1}{2} t^2 \delta_{i,2} Ni2(t)=21(1t)2δi,0+t(1t)δi,1+21t2δi,2

这里, ( δ i , j ) 是 K r o n e c k e r d e l t a 函数,当 ( i = j ) 时为 1 ,否则为 0 。 ( t ) 是参数,其范围通常为 ( [ 0 , 1 ] ) 。 这里,( \delta_{i,j} ) 是Kronecker delta函数,当 ( i = j ) 时为1,否则为0。( t ) 是参数,其范围通常为 ( [0, 1] )。 这里,(δi,j)Kroneckerdelta函数,当(i=j)时为1,否则为0(t)是参数,其范围通常为([0,1])

特性

  1. 局部控制:改变一个控制点只会影响该点相邻的曲线段,不会影响整个曲线。
  2. 平滑性:二次B样条曲线是连续且曲率连续的,除非控制点共线。
  3. 凸包性质:曲线总是位于其控制点的凸包内。

计算方法

计算二次B样条曲线的控制点位置通常涉及递归定义的B样条基函数。对于二次B样条,基函数可以通过递归公式计算:

N i 0 ( t ) = { 1 if  t i ≤ t < t i + 1 0 otherwise N_i^0(t) = \begin{cases} 1 & \text{if } t_i \leq t < t_{i+1} \\ 0 & \text{otherwise} \end{cases} Ni0(t)={10if tit<ti+1otherwise

N i k ( t ) = t − t i t i + k − t i N i k − 1 ( t ) + t i + k + 1 − t t i + k + 1 − t i + 1 N i + 1 k − 1 ( t ) N_i^k(t) = \frac{t - t_i}{t_{i+k} - t_i} N_i^{k-1}(t) + \frac{t_{i+k+1} - t}{t_{i+k+1} - t_{i+1}} N_{i+1}^{k-1}(t) Nik(t)=ti+ktittiNik1(t)+ti+k+1ti+1ti+k+1tNi+1k1(t)

其中, ( k ) 是 B 样条的次数(对于二次 B 样条, ( k = 2 ) ), ( t i ) 是节点值,通常均匀分布。 其中,( k ) 是B样条的次数(对于二次B样条,( k = 2 )),( t_i ) 是节点值,通常均匀分布。 其中,(k)B样条的次数(对于二次B样条,(k=2)),(ti)是节点值,通常均匀分布。

实际例子

二次B样条曲线(Quadratic B-spline curve)是一种常用的参数曲线,它通过一系列控制点来定义,并且具有局部控制特性,即改变一个控制点只会影响曲线的一小部分。下面我将给出一个实际的二次B样条曲线的例子,并解释其构造过程。

例子:

假设我们有三个控制点 ( P 0 ( 0 , 0 ) ) , ( P 1 ( 1 , 1 ) ) , ( P 2 ( 2 , 0 ) ) ,我们想要构造一条通过这三个控制点的二次 B 样条曲线。 假设我们有三个控制点 (P_0(0,0)), (P_1(1,1)), (P_2(2,0)),我们想要构造一条通过这三个控制点的二次B样条曲线。 假设我们有三个控制点(P0(0,0)),(P1(1,1)),(P2(2,0)),我们想要构造一条通过这三个控制点的二次B样条曲线。

构造步骤:

  1. 确定节点向量:对于二次B样条曲线,节点向量的长度通常为 (n + 4),其中 (n) 是控制点的数量。在这个例子中,(n = 2),因此节点向量为 (U = [0, 0, 0, 1, 2, 3, 3, 3])。

  2. 计算基函数
    二次 B 样条曲线的基函数 ( N i , 2 ( t ) ) 可以通过递归公式计算: 二次B样条曲线的基函数 (N_{i,2}(t)) 可以通过递归公式计算: 二次B样条曲线的基函数(Ni,2(t))可以通过递归公式计算:

    • ( N i , 0 ( t ) = 1 ) i f ( t i ≤ t < t i + 1 ) (N_{i,0}(t) = 1) if (t_i \leq t < t_{i+1}) (Ni,0(t)=1)if(tit<ti+1)
    • ( N i , k ( t ) = ( t − t i ) N i , k − 1 ( t ) t i + k − 1 − t i + ( t i + k − t ) N i + 1 , k − 1 ( t ) t i + k − t i + 1 ) (N_{i,k}(t) = \frac{(t - t_i)N_{i,k-1}(t)}{t_{i+k-1} - t_i} + \frac{(t_{i+k} - t)N_{i+1,k-1}(t)}{t_{i+k} - t_{i+1}}) (Ni,k(t)=ti+k1ti(tti)Ni,k1(t)+ti+kti+1(ti+kt)Ni+1,k1(t))

    对于上述节点向量,计算 ( N 0 , 2 ( t ) ) , ( N 1 , 2 ( t ) ) , ( N 2 , 2 ( t ) ) 的值。 对于上述节点向量,计算 (N_{0,2}(t)), (N_{1,2}(t)), (N_{2,2}(t)) 的值。 对于上述节点向量,计算(N0,2(t)),(N1,2(t)),(N2,2(t))的值。

  3. 构建曲线方程:二次B样条曲线方程可以表示为:
    C ( t ) = ∑ i = 0 n − 1 N i , 2 ( t ) P i for  t ∈ [ t 2 , t n + 1 ) C(t) = \sum_{i=0}^{n-1} N_{i,2}(t) P_i \quad \text{for } t \in [t_2, t_{n+1}) C(t)=i=0n1Ni,2(t)Pifor t[t2,tn+1)
    将控制点和基函数的值代入上述方程中,可以得到具体的曲线方程。

示例计算:

以 (t = 1) 为例,计算相应的 (C(t)) 值:

  • 计算基函数:
    ( N 0 , 2 ( 1 ) ) , ( N 1 , 2 ( 1 ) ) , ( N 2 , 2 ( 1 ) ) (N_{0,2}(1)), (N_{1,2}(1)), (N_{2,2}(1)) (N0,2(1)),(N1,2(1)),(N2,2(1))

  • 使用曲线方程计算 (C(1)):
    ( C ( 1 ) = N 0 , 2 ( 1 ) P 0 + N 1 , 2 ( 1 ) P 1 + N 2 , 2 ( 1 ) P 2 ) (C(1) = N_{0,2}(1) P_0 + N_{1,2}(1) P_1 + N_{2,2}(1) P_2) (C(1)=N0,2(1)P0+N1,2(1)P1+N2,2(1)P2)
    通过这种方法,可以计算出曲线上任意点的坐标。

结果:

在这个例子中,曲线会平滑地连接这三个控制点,但不会完全通过它们,这是B样条曲线的一个特点。通过调整节点向量的分布或者增加更多的控制点,可以进一步调整曲线的形状和特征。

这个例子展示了如何使用二次B样条曲线来生成平滑的曲线形状,这在计算机图形学和工程设计中非常有用。

1.3.分类

B样条曲线(B-spline Curve)是一种在计算机图形学和计算机辅助设计(CAD)中广泛使用的参数曲线,它比贝塞尔曲线(Bezier Curve)具有更好的局部控制性和更灵活的形状控制。B样条曲线可以根据其控制点的重数、阶数和结点向量来分类。以下是B样条曲线的主要分类方式:

  1. 根据控制点的重数

    • 均匀B样条曲线(Uniform B-spline Curve):结点向量中的结点是等间隔分布的,即结点向量的差分是常数。这种曲线具有周期性,适用于周期性和对称性较强的形状设计。

      一个2次5个控制点均匀B样条的节点矢量例子:
      T = ( t 0 , t 1 , . . . , t 7 ) = ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ; T=(t_{0}, t_{1}, ..., t_{7})=(0,1,2,3,4,5,6,7); T=(t0,t1,...,t7)=(0,1,2,3,4,5,6,7);

    • 准均匀B样条曲线(Non-uniform B-spline Curve)

      节点矢量的前k+1,后k+1重合。其余均匀分布。

      一个2次5个控制点准均匀B样条的节点矢量例子:
      T = ( t 0 , t 1 , . . . , t 7 ) = ( 0 , 0 , 0 , 1 , 2 , 3 , 3 , 3 ) ; T=(t_{0}, t_{1}, ..., t_{7})=(0,0,0,1,2,3,3,3); T=(t0,t1,...,t7)=(0,0,0,1,2,3,3,3);

    • 分段Bezier曲线

      节点矢量前k+1,后k+1重合。其余重复度为k。且控制点数减去1需为次数的正整数倍。

      一个2次5个控制点分段Bezier的节点矢量例子:
      T = ( t 0 , t 1 , . . . , t 7 ) = ( 0 , 0 , 0 , 1 , 1 , 2 , 2 , 2 ) ; T=(t_{0}, t_{1}, ..., t_{7})=(0,0,0,1,1,2,2,2); T=(t0,t1,...,t7)=(0,0,0,1,1,2,2,2);

    • 非均匀B样条曲线

      节点矢量非递减,两端节点重复度<=k+1,内节点重复度<=k,节点个数为:n+k+1。k为次数。n为最后一个控制点索引。

  2. 根据曲线的阶数

    • 线性B样条曲线(Linear B-spline Curve):阶数为1,相当于直线段的连接。
    • 二次B样条曲线(Quadratic B-spline Curve):阶数为2,形成的曲线是二次曲线段。
    • 三次B样条曲线(Cubic B-spline Curve):阶数为3,通常是最常用的B样条曲线,因为它能够形成平滑且易于控制的曲线。
    • 高阶B样条曲线(Higher Order B-spline Curve):阶数大于3,可以形成更复杂和更高阶的曲线段。
  3. 根据结点向量的性质

    • 开曲线(Open Curve):结点向量在两端没有重复,曲线在端点处不与控制多边形的端点相切。
    • 闭曲线(Closed Curve):结点向量在两端有重复,形成闭合的曲线,如环形或周期性曲线。
  4. 根据曲线的连续性

    • C0连续(C0 Continuity):曲线的连接点处至少是连接的。
    • C1连续(C1 Continuity):曲线的连接点处切线连续。
    • C2连续(C2 Continuity):曲线的连接点处曲率连续。
    • 更高阶连续性(Higher Order Continuity):曲线的连接点处更高阶导数连续。

B样条曲线的这些分类方式使其在实际应用中非常灵活,可以根据设计需求选择合适的曲线类型。在CAD软件中,通常会提供工具来帮助用户根据需要设置B样条曲线的参数,以达到最佳的设计效果。

1.4.其他

1.当端节点的重复度为k+1时,k次B样条曲线有和k次Bezier曲线相同的端点几何性质。此时,如B样条曲线的定义域仅有一个非零节点区间,则所定义的该k次B样条曲线就是k次Bezier曲线。

2.高次B样条曲线更光滑,k次B样条可保证k-1阶的连续性,但曲线与特征多边形的逼近程度变差。次数越高,局部性越弱,曲线偏离控制多边形程度越大。工程中二次,三次B样条曲线已经能满足需求。

3.对指定控制点,指定节点矢量的B样条曲线,当向节点矢量中插入新的元素时,可以通过调整并新增一个控制点。来使得新控制点,新节点矢量下的曲线的几何性质和之前曲线维持一致。

2.B样条曲面

B样条曲面(B-spline Surface)是一种在计算机图形学和计算机辅助设计(CAD)中常用的曲面表示方法,它基于B样条曲线理论扩展而来。B样条曲面由一系列控制点(control points)和基函数(basis functions)定义,这些控制点通常排列在一个矩形的网格上,而基函数则决定了曲面如何由这些控制点生成。

基本概念

  1. 控制点(Control Points):控制点是一个矩阵,其中每一行对应一个U方向的曲线,每一列对应一个V方向的曲线。这些点决定了曲面的大致形状。

  2. 节点向量(Knot Vectors):在U和V方向上分别有一个节点向量,它们定义了B样条基函数的支撑区间。

  3. 基函数(Basis Functions):B样条曲面的基函数是由节点向量定义的,它们是分段多项式函数。基函数的阶数(degree)和节点向量的重复度(multiplicity)决定了曲线的平滑度。

数学表示

一个p×q阶的B样条曲面可以用以下公式表示:

S ( u , v ) = ∑ i = 0 n ∑ j = 0 m N i , p ( u ) N j , q ( v ) P i , j S(u, v) = \sum_{i=0}^{n} \sum_{j=0}^{m} N_{i,p}(u) N_{j,q}(v) P_{i,j} S(u,v)=i=0nj=0mNi,p(u)Nj,q(v)Pi,j

其中:

  • S ( u , v ) 是曲面上的点,由参数 u 和 v 决定。 S(u, v) 是曲面上的点,由参数u和v决定。 S(u,v)是曲面上的点,由参数uv决定。

  • N i , p ( u ) 和 N j , q ( v ) 分别是 U 方向和 V 方向的 p 阶和 q 阶 B 样条基函数。 N_{i,p}(u) 和 N_{j,q}(v) 分别是U方向和V方向的p阶和q阶B样条基函数。 Ni,p(u)Nj,q(v)分别是U方向和V方向的p阶和qB样条基函数。

  • P i , j 是控制点。 对 U 来说, T = [ u 0 , . . . , u n + p + 1 ] ; 对 V 来说, T = [ v 0 , . . . , v m + q + 1 ] ; 其中 S ( u , v ) 的 u 取值范围为: [ u p , u n + 1 ] ; 其中 S ( u , v ) 的 v 取值范围为 : [ v q , v m + 1 ] ; P_{i,j} 是控制点。\\ 对U来说,T=[u_{0},...,u_{n+p+1}];\\ 对V来说,T=[v_{0},...,v_{m+q+1}];\\ 其中S(u,v)的u取值范围为:[u_{p},u_{n+1}];\\ 其中S(u,v)的v取值范围为:[v_{q},v_{m+1}]; Pi,j是控制点。U来说,T=[u0,...,un+p+1];V来说,T=[v0,...,vm+q+1];其中S(u,v)u取值范围为:[up,un+1];其中S(u,v)v取值范围为:[vq,vm+1];

特点

  • 局部控制:改变一个控制点通常只影响曲面的一小部分,这是由于B样条基函数的局部支撑性。
  • 平滑性:B样条曲面通常比贝塞尔曲面更平滑,因为它们可以更容易地控制曲面的连续性。
  • 灵活性:可以通过调整控制点和节点向量来改变曲面的形状。

应用

B样条曲面广泛应用于各种需要精确曲面表示的领域,如汽车设计、飞机设计、动画制作等。它们提供了一种灵活且精确的方式来设计和操作复杂的曲面形状。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VirtualBox虚拟机下安装Ubuntu24.04操作系统

目录 0 背景1 虚拟机的安装1.1 下载安装包1.2 走安装向导 2 操作系统的安装2.1 下载光盘镜像文件2.2 安装操作系统到虚拟机上 3 基本配置3.1 网络连接方式3.2 共享文件夹3.3 设置显存大小 0 背景 首先说说Ubuntu系统&#xff0c;或者更普遍一点&#xff0c;Linux系统究竟有什么…

validation 验证参数

validation 验证参数 一、引入POM依赖 添加spring-boot-starter-validation <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>或添加hibernate-valida…

基于java+springboot+vue实现的智慧生活商城系统(文末源码+Lw)244

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通…

platformio烧写STC8H1K08单片机程序失败:Serial port error: read timeout

问题 在使用platformio进行STC8H1K08单片机开发&#xff0c;在烧录编译好的程序时失败了&#xff0c;烧录过程日志如下&#xff1a; * 正在执行任务: C:\Users\23043036\.platformio\penv\Scripts\platformio.exe run --target upload Processing STC8H1K08 (platform: intel…

ionic7 从安装 到 项目启动最后打包成 apk

报错处理 在打包的时候遇到过几个问题&#xff0c;这里记录下来两个 Visual Studio Code运行ionic build出错显示ionic : 无法加载文件 ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在 说明 由于之前使用的是 ionic 3&#xff0c;当时打包的…

驾考小技巧:老北京布鞋!距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”——早读(逆天打工人爬取热门微信文章解读)

我20年驾校4000多块钱&#xff0c;你呢&#xff1f; 引言Python 代码第一篇 洞见 距离高考出分还剩3天&#xff0c;我却看到有些孩子已经拿了“满分”第二篇 视频新闻结尾 引言 昨天的文章顺利发出 看来“梅西” 这两个字在我们这边 不是敏感词 只是很多个罗粉搞得有点过头了 …

Android设置页面Activity全屏(隐藏导航栏、状态栏)

3、代码中设置&#xff1a;在setContentView 之前调用 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 注意&#xff1a; 当有全面屏手机可以显示虚拟…

2769. 找出最大的可达成数字

2769. 找出最大的可达成数字 题目链接&#xff1a;2769. 找出最大的可达成数字 代码如下&#xff1a; class Solution { public:int theMaximumAchievableX(int num, int t) {return num2*t; } };

公司名称含有关商标名称可能涉及侵权!

有个朋友找到普推商标知产老杨&#xff0c;说有个人给他打电话&#xff0c;说他的公司名称侵权另一家的商标名称&#xff0c;让他要改下公司名称&#xff0c;不改就要告侵权&#xff0c;此前看到过许多&#xff0c;在一些省市注册公司时&#xff0c;如果公司名称与已注册商标相…

聚类算法(1)---最大最小距离、C-均值算法

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在AI学习笔记&#…

区块链2024

项目名称&#xff1a;基于区块链的物资管理系统 技术栈:SpringBoot SpringSecurity MyBatis-Plus MySQL Redis CouchDB Hyperledger Fabric RabbitMQ Docker 项目描述&#xff1a;在自然灾害期间&#xff0c;物资管理常面临信息孤立和不透明等问题。为此&#xff0c;我…

象战----第十二届中山市邀请赛正赛

本次的题解一定让大家享受脑细胞碰撞与再生死亡的感受&#xff01;定然酣畅淋漓&#xff01;请耐心的读完 简称&#xff1a;让脑袋死机。。。 象战 老规矩先分析在打码&#xff1a; 注意到题目告诉我们&#xff1a;四个角落是不能放的 那么 我们设象在(i,j).(注意&#xff1a…

uniapp实现幻灯功能方法及代码

在 UniApp 中实现幻灯功能&#xff0c;通常可以使用 swiper 组件&#xff0c;该组件用于滑动视图容器&#xff0c;常用于制作轮播图效果。以下是一个简单的幻灯功能实现方法及代码示例&#xff1a; 步骤 1&#xff1a;在页面的模板部分添加 swiper 和 swiper-item 组件 <t…

解决双击bootstrap.bat没有生成b2.exe文件

双击bootstrap.bat但是并没有没有生成b2.exe文件&#xff0c;会报如下错误&#xff1a; "cl" 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。D:\cppsoft\boost_1_85_0\tools\build\src\engine>dir *.exe 驱动器 D 中的卷是 Data 卷的序列号是…

eNSP学习——配置基于全局地址池的DHCP

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、配置基于全局地址池的 DHCP Server 3、配置DHCP Client 主要命令 [R1]dhcp enable //开启 DHCP功能//创建一个全局地址池&#xff0c;地址池名称为huawei1 [R1]ip pool h…

Linux系统开机自启动脚本(案例:Raspberry Pi 4B脚本)

前言&#xff1a;本篇博客为手把手教学的 Linux 系统开机自启动脚本教程&#xff0c;且额外包含有 Raspberry Pi 4B 的开机自启动案例。日常工程项目中往往需要 Linux 系统能够自启动一些代码程序&#xff0c;本篇博客利用虚拟机下的 Ubuntu 自启动脚本来进行教学&#xff0c;且…

力扣240.搜索二维矩阵II

力扣240.搜索二维矩阵II 因为原数组是从上到下从左到右增加的 在左下(和右上角)时有特性&#xff1a;i减小则a[i]减小&#xff0c;j增大则a[j]增大因此从左下角开始遍历 找到结果return即可 class Solution {public:bool searchMatrix(vector<vector<int>>&…

vue canvas学习

说明 在vue里试用一下canvas&#xff0c;记录一下 代码 <template><div><canvas ref"canvas1" height"500" width"500"></canvas><button click"draw">画图</button></div> </templa…

深入解析Transformer:大模型核心技术揭秘

在大模型发展历程中&#xff0c;有两个比较重要点&#xff1a;第一&#xff0c;Transformer 架构。它是模型的底座&#xff0c;但 Transformer 不等于大模型&#xff0c;但大模型的架构可以基于 Transformer&#xff1b;第二&#xff0c;GPT。严格意义上讲&#xff0c;GPT 可能…

【网络安全的神秘世界】docker启动失败?看我如何成功启动

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 &#x1f64b;‍♂️问题描述 关闭docker后再启动就发现启动失败了 错误信息&#xff1a;Job for docker.service failed b…