【Unity学习笔记】第十九 · 物理引擎约束求解解惑(LCP,最优,拉格朗日乘数法,SI,PGS,基于冲量法)

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/140309494

作者:CSDN@|Ringleader|


在学习物理引擎过程中,有几大问题一直困扰着我:

  1. 约束求解到底是LCP还是带约束最优问题?
  2. 约束求解过程中拉格朗日乘数法和带约束优化中的拉格朗日乘数法是一个东西吗?
  3. 基于力的约束求解、基于冲量、基于位置的约束求解区别?
  4. SI和PGS的区别?GS与PGS区别?

最优问题

在这里插入图片描述
上图给出了约束的两种形式,碰撞约束(不等式约束)和关节约束(等式约束)。解决约束的方式都是沿着碰撞法线或者连杆方向施加力或者冲量,使之满足约束。

现在的问题是,满足约束的方式有很多,为什么一定要沿着约束函数梯度方向?除非你认为沿着梯度方向解决约束最快或者说引入能量最小!

这意味着你默认这就是最优问题!

那么可能的最优目标是什么呢?如果从解决约束移动距离最小来看目标函数 f ( x ) f(x) f(x)就是 Δ x Δx Δx,如果是从引入能量最小来看目标函数 f ( x ) f(x) f(x)就是 1 2 m Δ v 2 \frac{1}{2}m Δv^2 21mΔv2,写成 Δ x Δx Δx形式就是 1 2 h 2 m Δ x 2 \frac{1}{2h^2}mΔx^2 2h21mΔx2 h h h为时间步长),写成矩阵的二次型形式就是 1 2 h 2 Δ x T M Δ x \frac{1}{2h^2}Δx^TMΔx 2h21ΔxTMΔx。(注:本文不讨论旋转

因为有基于冲量和基于位置解决约束思路,我这里统一用能量最小约化目标。

那么约束求解就变成了带约束的二次规划问题了(先讨论等式约束),即:
m i n i m i z e f ( Δ x ) = 1 2 h 2 Δ x T M Δ x s . t . C i ( x + Δ x ) = 0 , i ∈ N minimize \quad f(Δx)=\frac{1}{2h^2}Δx^TMΔx \\ s.t. \quad C_i(x+Δx) = 0,i∈N minimizef(Δx)=2h21ΔxTMΔxs.t.Ci(x+Δx)=0,iN

或者
m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . C i ( v + Δ v ) = 0 , i ∈ N minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad C_i(v+Δv) = 0,i∈N minimizef(Δv)=21ΔvTMΔvs.t.Ci(v+Δv)=0,iN

基于位置的约束求解

线性化处理约束
C i ( x + Δ x ) ≈ C i ( x ) + ∇ C i ( x ) Δ x C_i(x+Δx)≈C_i(x)+ ∇C_i(x)Δx Ci(x+Δx)Ci(x)+Ci(x)Δx

那么 C i ( x ) + ∇ C i ( x ) Δ x = 0 C_i(x)+ ∇C_i(x)Δx=0 Ci(x)+Ci(x)Δx=0,即 ∇ C i ( x ) Δ x = − C i ( x ) ∇C_i(x)Δx=-C_i(x) Ci(x)Δx=Ci(x)

联立所有约束,
J = [ ∇ C 1 ( x ) , ∇ C 2 ( x ) , . . . , ∇ C n ( x ) ] T J = [∇C_1(x),∇C_2(x),...,∇C_n(x)]^T J=[C1(x),C2(x),...,Cn(x)]T
b = [ − C 1 ( x ) , − C 2 ( x ) , . . . , − C n ( x ) ] T b = [-C_1(x),-C_2(x),...,-C_n(x)]^T b=[C1(x),C2(x),...,Cn(x)]T,

那么原二次规划问题就变为:

m i n i m i z e f ( Δ x ) = 1 2 h 2 Δ x T M Δ x s . t . J Δ x = b minimize \quad f(Δx)= \frac{1}{2h^2}Δx^TMΔx \\ s.t. \quad JΔx=b minimizef(Δx)=2h21ΔxTMΔxs.t.JΔx=b

使用拉格朗日乘数法求解,将带约束问题变为无约束问题:

拉格朗日函数: L ( Δ x , λ ) = 1 2 h 2 Δ x T M Δ x + λ T ( J Δ x − b ) L(Δx,λ)=\frac{1}{2h^2}Δx^TMΔx+λ^T(JΔx-b) L(Δx,λ)=2h21ΔxTMΔx+λT(JΔxb)


{ ∂ L ∂ Δ x = 1 h 2 M Δ x + J T λ = 0 ( 1 ) ∂ L ∂ λ = J Δ x − b = 0 ( 2 ) \begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta x} = \frac{1}{h^2} M \Delta x + J^Tλ = 0 \quad\quad(1) \\ \frac{\partial \mathcal{L}}{\partial \lambda} = J \Delta x - b = 0 \quad\quad\quad\quad\quad(2) \\ \end{cases} {ΔxL=h21MΔx+JTλ=0(1)λL=JΔxb=0(2)

将第一项 Δ x = − h 2 M − 1 J T λ Δx=-h^2M^{-1}J^Tλ Δx=h2M1JTλ 带入第二项,得: − h 2 J M − 1 J T λ = b -h^2JM^{-1}J^Tλ=b h2JM1JTλ=b,令 A = − h 2 J M − 1 J T A=-h^2JM^{-1}J^T A=h2JM1JT
则解线性方程组 A λ = b Aλ=b Aλ=b 就可以得到λ,然后 Δ x = − h 2 M − 1 J T λ Δx=-h^2M^{-1}J^Tλ Δx=h2M1JTλ就可求解。

如果A是可逆的,我们可以通过求逆来求解;如果不可逆,我们可以使用数值方法来求解,如高斯赛德尔、雅可比法、牛顿法等。

基于冲量的约束求解

m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . C i ( v + Δ v ) = 0 , i ∈ N minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad C_i(v+Δv) = 0,i∈N minimizef(Δv)=21ΔvTMΔvs.t.Ci(v+Δv)=0,iN

同样,线性化约束 C i ( v + Δ v ) ≈ C i ( v ) + ∇ C i ( v ) Δ v = 0 C_i(v+Δv)≈C_i(v)+∇C_i(v)Δv=0 Ci(v+Δv)Ci(v)+Ci(v)Δv=0,原问题转为:
m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . J Δ v = b minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad JΔv=b \\ minimizef(Δv)=21ΔvTMΔvs.t.JΔv=b
其中 J = [ C 1 ( v ) , C 2 ( v ) , . . . , C n ( v ) ] T J=[C_1(v),C_2(v),...,C_n(v)]^T J=[C1(v),C2(v),...,Cn(v)]T b = [ − C 1 ( v ) , − C 2 ( v ) , . . . , − C n ( v ) ] T b=[-C_1(v),-C_2(v),...,-C_n(v)]^T b=[C1(v),C2(v),...,Cn(v)]T n n n为约束个数。

利用拉格朗日乘数法, L ( Δ v , λ ) = 1 2 Δ v T M Δ v + λ T ( J Δ v − b ) L(Δv,λ)=\frac{1}{2}Δv^TMΔv + λ^T(JΔv-b) L(Δv,λ)=21ΔvTMΔv+λT(JΔvb)

{ ∂ L ∂ Δ v = M Δ v + J T λ = 0 ( 3 ) ∂ L ∂ λ = J Δ v − b = 0 ( 4 ) \begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta v} = M \Delta v + J^Tλ = 0 \quad\quad(3) \\ \frac{\partial \mathcal{L}}{\partial \lambda} = J \Delta v - b = 0 \quad\quad\quad\quad(4) \\ \end{cases} {ΔvL=MΔv+JTλ=0(3)λL=JΔvb=0(4)
− J M − 1 J T λ = b -JM^{-1}J^Tλ=b JM1JTλ=b,求解线性方程组可得λ和Δv。

不等式约束情况

以基于冲量的约束求解为例,
m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . J Δ v ≤ b minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad JΔv≤b \\ minimizef(Δv)=21ΔvTMΔvs.t.JΔvb
运用KKT条件下的拉格朗日乘数法,

L ( Δ v , λ ) = 1 2 Δ v T M Δ v + λ T ( J Δ v − b ) L(Δv,λ)=\frac{1}{2}Δv^TMΔv + λ^T(JΔv-b) L(Δv,λ)=21ΔvTMΔv+λT(JΔvb)
满足:
K K T 条件 { ∂ L ∂ Δ v = M Δ v + J T λ = 0 ( 5 ) J Δ v − b ≤ 0 ( 6 ) λ ≥ 0 ( 7 ) λ T ( J Δ v − b ) = 0 ( 8 ) KKT条件\begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta v} = M \Delta v + J^Tλ = 0 \quad\quad(5)\\ JΔv-b≤0 \quad\quad\quad\quad\quad\quad\quad(6)\\ λ≥0 \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(7)\\ λ^T(JΔv-b)=0 \quad\quad\quad\quad\quad(8) \end{cases} KKT条件 ΔvL=MΔv+JTλ=0(5)JΔvb0(6)λ0(7)λT(JΔvb)=0(8)
第(8)项的条件称作互补松弛条件

分两种情况,第一种就是λ=0,即f(x)本身极值就在约束内,类似于碰撞约束中已经分离的情况,此时Δv=0,无需施加冲量;
第二种就是λ>0,因为松弛互补约束,必须 J Δ v − b = 0 JΔv-b=0 JΔvb=0,这和等式约束相同。

所以对于不等式约束,同样可以使用类似等式约束的拉格朗日乘数法,但需要对λ值进行钳值,保证λ≥0即可(约束≤0则λ≥0,约束≥0则λ≤0)。

对于其中的数学解释,可以参考下面文章:

寻找“最好”(4)——不等约束和KKT条件
Karush-Kuhn-Tucker (KKT)条件

物理上的理解可以参考《基于物理的建模与动画10.3节》碰撞约束的例子,其中 a − a^- a是碰撞前的加速度, a + a^+ a+是碰撞后的加速度。地面反作用力 f f f a + a^+ a+就有类似的互补性,如果 f = J λ f=Jλ f=Jλ就要求λ≥0,让对象至少不会往地面方向钻。
在这里插入图片描述

线性互补问题

从上面的分析可以看出,约束求解就是最优问题,很多文章虽然没有明确指出,但默认使用了上面的结论,也就是沿约束梯度方向,可以使约束求解引入的动能最小。

但为啥很多书籍和文章又称约束解决本质上是线性互补问题呢。
从前面不等约束求解使用KKT条件,其中的互补松弛条件能看出一些端倪。

我们先看一看在不使用优化思想下是怎么求解约束的。

约束力法

根据 C ˙ = J q ˙ = 0 \dot{C}=J\dot{q}=0 C˙=Jq˙=0,以及约束力于速度正交(理想约束下约束力不做功)→ F c T q ˙ = 0 F_c^T\dot{q}=0 FcTq˙=0,得到 F c F_c Fc J J J平行,所以 F c = J T λ F_c=J^Tλ Fc=JTλ
其中 F c = J T λ = ∇ C 1 λ 1 + ∇ C 2 λ 2 + … + ∇ C m λ m F_c=J^Tλ=∇C_1λ_1+∇C_2λ_2+…+∇C_mλ_m Fc=JTλ=C1λ1+C2λ2++Cmλm,m是梯度的维度。

同时根据 C ¨ = 0 \ddot{C}=0 C¨=0得到:

C ¨ = J ˙ q ˙ + J q ¨ = J ˙ q ˙ + J M − 1 ( F e x t + F c ) = J ˙ q ˙ + J M − 1 ( F e x t + J T λ ) = 0 \ddot{C}=\dot{J}\dot{q}+J\ddot{q} = \dot{J}\dot{q}+JM^{-1}(F_{ext}+F_c) = \dot{J}\dot{q}+JM^{-1}(F_{ext}+J^Tλ) =0 C¨=J˙q˙+Jq¨=J˙q˙+JM1(Fext+Fc)=J˙q˙+JM1(Fext+JTλ)=0

则, J M − 1 J T λ = − J ˙ q ˙ − J M − 1 F e x t JM^{-1}J^Tλ=- \dot{J}\dot{q}-JM^{-1}F_{ext} JM1JTλ=J˙q˙JM1Fext

只有λ是未知的,由此解这个线性方程组就能得到约束力 F c F_c Fc。那么对应速度和位置通过积分就能获得。

这就是约束力法解约束的思路。

但这个只是无摩擦力的理想约束下,且为等式约束得出的公式,其他复杂情况是否能用类似拉格朗日乘数法暂未可知。

而且基于力的方式求解可能不适合接触约束,因为两个物体的碰撞时,互相之间的力变化很快,而且有一个很大的峰值;而且存在摩檫力约束时,循环求解时可能导致一个无穷大的值。(这段话出自游戏物理引擎(四) 约束)
在这里插入图片描述

基于冲量法

类似的。
施加额外冲量 I = M Δ V = ∫ t t + Δ t F d t I=MΔV=\int_{t}^{t+Δt} Fdt I=MΔV=tt+ΔtFdt,半隐式欧拉法的话,力认为是恒定的,那么

M Δ V = F Δ t = J T λ Δ t MΔV=FΔt=J^TλΔt MΔV=FΔt=JTλΔt Δ V = M − 1 J T λ Δ t ΔV=M^{-1}J^TλΔt ΔV=M1JTλΔt

根据 C ˙ = J q ˙ = J V = 0 \dot{C}=J\dot{q}=JV=0 C˙=Jq˙=JV=0,其中 V = V= V=

C ˙ = J ( V i n i t + Δ V ) = J ( V i n i t + M − 1 J T λ Δ t ) = 0 \dot{C}=J(V_{init}+ΔV)=J(V_{init}+M^{-1}J^TλΔt)=0 C˙=J(Vinit+ΔV)=J(Vinit+M1JTλΔt)=0 推导出

J M − 1 J T λ Δ t = − J V i n i t JM^{-1}J^TλΔt=-JV_{init} JM1JTλΔt=JVinit

解这个线性方程组就能得到λ和Δv了,对应Δx也能得到。

如果只是通过上面解得出Δv,仅仅保证速度不会违反约束,而要保证位置同样不会违反约束,可以在速度约束加上Baumgarte 项,即 J V + b = 0 JV+b=0 JV+b=0,其中 b = − β e Δ t ( 0 < β < 1 ) b=-β\frac{e}{Δt} (0<β<1) b=βΔte(0<β<1),e代表误差项,例如碰撞约束中就是穿透深度,β代表约束违反修正速度。

基于位置法

C ( x + Δ x ) ≈ C ( x ) + ∇ C ( x ) Δ x = 0 C(x+Δx)≈C(x)+∇C(x)Δx=0 C(x+Δx)C(x)+C(x)Δx=0,那么 J Δ x = − C ( x ) JΔx=-C(x) JΔx=C(x),其中 J = ∇ C ( x ) J=∇C(x) J=C(x)
如果使用半隐式欧拉法, Δ x = v ′ Δ t = ( v i n i t + a Δ t ) Δ t = ( v i n i t + M − 1 J T λ Δ t ) Δ t Δx = v^{'}Δt=(v_{init}+aΔt)Δt=(v_{init}+M^{-1}J^TλΔt)Δt Δx=vΔt=(vinit+aΔt)Δt=(vinit+M1JTλΔt)Δt,

带入上面得到: J v i n i t Δ t + J M − 1 J T λ Δ t 2 = − C ( x ) Jv_{init}Δt+JM^{-1}J^TλΔt^2=-C(x) JvinitΔt+JM1JTλΔt2=C(x),则

J M − 1 J T λ Δ t 2 = − J v i n i t Δ t − C ( x ) JM^{-1}J^TλΔt^2=-Jv_{init}Δt-C(x) JM1JTλΔt2=JvinitΔtC(x),解这个线性方程组就能得到λ,然后Δx亦可得到。

赵航在基于约束的物理说 v i n i t = 0 v_{init}=0 vinit=0,我不知道是不是PBD不考虑速度还是怎么造成的,暂不做深究,思想都差不多。

比较约束求解中最优法和普通物理分析法

分别使用最优和不适用最优的方式,都独立给出了约束求解的方法。
比较一下,例如基于冲量的方法。
最优法 { ∂ L ∂ Δ v = M Δ v + J T λ = 0 ∂ L ∂ λ = J Δ v − b = 0 最优法\begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta v} = M \Delta v + J^Tλ = 0 \\ \frac{\partial \mathcal{L}}{\partial \lambda} = J \Delta v - b = 0\\ \end{cases} 最优法{ΔvL=MΔv+JTλ=0λL=JΔvb=0

物理分析法 { M Δ V = F Δ t = J T λ Δ t C ˙ = J ( V i n i t + Δ V ) = 0 物理分析法\begin{cases} MΔV=FΔt=J^TλΔt \\ \dot{C}=J(V_{init}+ΔV)=0 \end{cases} 物理分析法{MΔV=FΔt=JTλΔtC˙=J(Vinit+ΔV)=0
在不考虑 b b b 项差异情况下,差别仅在λ,可以发现最优方式中的λ会暗含Δt项;

而基于位置的
{ 最优法 h 2 J M − 1 J T λ = C ( x ) 物理分析法 J M − 1 J T λ Δ t 2 = − J v i n i t Δ t − C ( x ) \begin{cases} 最优法\quad h^2JM^{-1}J^Tλ= C(x)\\ 物理分析法\quad JM^{-1}J^TλΔt^2=-Jv_{init}Δt-C(x) \end{cases} {最优法h2JM1JTλ=C(x)物理分析法JM1JTλΔt2=JvinitΔtC(x)
可以看到更是非常接近。(不知道是不是推导的问题,感觉两个λ符号相反?问题不大,思路对的就行)

可以看出,用最优方法和物理分析法,得到的结果是类似的,但数学最优方式推导简洁优美,而且很容易处理不等约束,拉格朗日乘数法数学意义明确。

相反,普通物理推导方式,对于拉格朗日乘数法使用的正确性含糊其辞,且推导方式较复杂。

所以这波啊,是数学完胜!!!

问题解答

通过上面的研究,问题基本明晰,约束求解本质上就是最优问题,拉格朗日乘数法的使用,就是求解这种带约束的优化问题,而所谓的线性互补问题,就是KKT条件中的互补松弛条件,两种方法使用的拉格朗日乘数法思路都一致,可能在λ的取值上存在差异。

基于力、基于冲量、基于位置求解思路上都很相近,主要区别就是算 C C C C ˙ \dot{C} C˙还是 C ¨ \ddot{C} C¨,然后用 λ λ λ替换里面的Δx、Δv或者Fc,最后求解含唯一未知数 λ λ λ的线性方程组即可。

SI、PGS本文没涉及,但已知结论就是它俩思想上一致,前者分别逐个求解单个λ,后者对每个λ矩阵中的一行也就是 λ i λ_i λi求解,数学上效果是一致的,可能在收敛性上存在差异。

而PGS比GS多一个限制λ范围大于等于0,也就是能够求解非等式约束罢了。

完毕!

参考目录

  1. Position Based Dynamics与二次规划
  2. 基于约束的物理
  3. PhysX原理与实现:一般约束
  4. 物理引擎之约束求解(一)——线性互补问题
  5. Video Game Physics Tutorial - Part III: Constrained Rigid Body Simulation
  6. Game Physics Series 周明倫
  7. Karush-Kuhn-Tucker (KKT)条件

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

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

相关文章

SpringBoot整合JWT示例教程

1. JWT简介 JSON Web Token (JWT) 是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间作为 JSON 对象安全地传输信息。由于这些信息是经过数字签名的&#xff0c;因此可以被验证和信任。JWT 通常用于身份验…

openharmony上传图片,并获取返回路径

适用条件&#xff1a; openharmony开发 4.0 release版本&#xff0c;对应能力API10 一直不断尝试&#xff0c;一会用官方提供的上传文件&#xff0c;一会用第三方库的axios都不行&#xff0c; 一会报错‘没权限&#xff0c;一会报错’路径错误&#xff0c;还有报错‘401参数错…

本地部署,去除动漫图像背景Anime Remove Background

目录 摘要 引言 深度学习在动漫角色中的应用 1.​U-Net 2.Mask R-CNN 3.ISNet 模型 4.MODNet 模型 5.InSPyReNet 模型 本地部署 运行效果 测验结果​ Tip&#xff1a; 摘要 动漫图像背景去除是一项在图像处理和计算机视觉领域具有重要应用的技术&#xff0c;广泛应用于…

奇舞周刊第533期:单点登录(SSO)实现详解

奇舞推荐 ■ ■ ■ 单点登录&#xff08;SSO&#xff09;实现详解&#xff01;&#xff01; 单点登录是什么&#xff1f;你是怎么理解的&#xff1f;单点登录是如何实现的。 纯前端怎么实现检测版本更新&#xff0c;请看这篇&#xff01; 在传统的多页Web应用中&#xff0c;每次…

CSS实现table表格:隔行换色的效果

表格是网页中十分重要的组成元素。表格用来存储数据&#xff0c;包含标题、表头、行和单元格。在HTML语言中&#xff0c;表格标记使用符号<table>表示。定义表格光使用<table>是不够的&#xff0c;还需要定义表格中的行、列、标题等内容。推荐博文&#xff1a;《HT…

Mac M1安装配置Hadoop+Flink SQL环境

Flink 1.18.1 Hadoop 3.4.0 一、准备工作 系统&#xff1a;Mac M1 (MacOS Sonoma 14.3.1) JDK&#xff1a;jdk1.8.0_381 &#xff08;注意&#xff1a;尽量一定要用JDK8&#xff0c;少用高版本&#xff09; Scala&#xff1a;2.12 JDK安装在本机的/opt/jdk1.8.0_381.jdk/C…

Uniapp鸿蒙项目实战

Uniapp鸿蒙项目实战 24.7.6 Dcloud发布了uniapp兼容鸿蒙的文档&#xff1a;Uniapp开发鸿蒙应用 在实际使用中发现一些问题&#xff0c;开贴记录一下 设备准备 windows电脑准备&#xff08;家庭版不行&#xff0c;教育版、企业版、专业版也可以&#xff0c;不像uniapp说的只有…

html5——CSS3_文本样式属性

目录 字体样式 字体类型 字体大小 字体风格 字体的粗细 文本样式 文本颜色 排版文本段落 文本修饰和垂直对齐 文本阴影 字体样式 字体类型 p{font-family:Verdana,"楷体";} body{font-family: Times,"Times New Roman", "楷体";} …

html5——CSS高级选择器

目录 属性选择器 E[att^"value"] E[att$"http"] E[att*"http"] 关系选择器 子代&#xff1a; 相邻兄弟&#xff1a; 普通兄弟&#xff1a; 结构伪类选择器 链接伪类选择器 伪元素选择器 CSS的继承与层叠 CSS的继承性 CSS的层叠性 …

华为HCIP Datacom H12-821 卷37

1.多选题 下面关于Network- Summary-LSA 描述正确的是 A、Network- Summary-LSA中的Metric被设置成从该ABR到达目的网段的开销值 B、Network- Sumary-LSA中的Net mask 被设置成目的网段的网络掩码 C、Network- Summary-LSA 是由ASBR产生的 D、Network- Summary-LSA 中的Li…

php安装Imagick扩展 处理pdf为图片

这个方法是使用源码编译安装&#xff0c;适用于php编译安装和包安装。如果有pecl&#xff0c;直接安装就行&#xff0c;我这是因为多个环境怕直接使用pecl工具导致混乱。 由于浏览器显示大量pdf不方便&#xff0c;我这先将pdf转化为图片再显示 如果没有安装php&#xff0c;这是…

网络层的角色与重要性:互联网通信的关键

本章讨论网络层及网络互连问题&#xff0c;也就是讨论多个网络通过路由器互连成为一个互连网络的各种问题。在介绍网络层提供的两种不同服务后&#xff0c;我们开始讲解本章的核心内容——网际协议&#xff08;IP&#xff09;&#xff0c;这是本书的一项重点内容。只有较深入地…

登录/注册

目录 1.HTML 2.CSS 3.JS 4.资源 5.运行结果 6.下载链接 7.注意事项 1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

Zabbix配置JAVA JMX监控

JAVA JMX监控简介 官方文档&#xff1a;https://www.zabbix.com/documentation/current/zh/manual/concepts/java Zabbix Java gateway以 Zabbix 守护进程方式原生支持监控 JMX 应用程序。Zabbix Java gateway 的守护进程是用 Java 编写。为了在特定主机上找到 JMX 计数器的值…

Java设计模式的7个设计原则

Java设计模式的7个设计原则是面向对象设计领域中的重要指导方针&#xff0c;它们旨在提高软件系统的可维护性、可扩展性、可复用性和灵活性。以下是这7个设计原则的详细解释&#xff1a; 1. 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09; 定义&#xff1a;一个…

LCM通讯的使用

本文主要介绍LCM通讯的基本使用&#xff0c;内容主要整理自官网 https://lcm-proj.github.io/lcm/index.html LCM&#xff0c;即Library for Communication and Marshalling&#xff0c;是一组用于消息传递与数据封装的库和工具&#xff0c;它主要的面向对象是要求高带宽、低延…

Cesium--获取当前相机中心与地面的射线焦点

本文记录获取当前相机中心与地面的射线焦点的方法&#xff0c;可用于视角缩放过程中&#xff0c;控制视角自动平滑切换到二维等场景&#xff1a; 方法一定是视角中心能与地面有交集&#xff0c;如果对着地平线或对着天空肯定是没效果的。直接放代码&#xff1a; //调整相机到正…

Objective-C 自定义渐变色Slider

文章目录 一、前情概要二、具体实现 一、前情概要 系统提供UISlider&#xff0c;但在开发过程中经常需要自定义&#xff0c;本次需求内容是实现一个拥有渐变色的滑动条&#xff0c;且渐变色随着手指touch的位置不同改变区域&#xff0c;类似如下 可以使用CAGradientLayer实现渐…

利用宝塔安装一套linux开发环境

更新yum&#xff0c;并且更换阿里镜像源 删除yum文件 cd /etc/yum.repos.d/ 进入yum核心目录 ls sun.repo rm -rf * 删除之前配置的本地源 ls 配置阿里镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 配置扩展包 wge…

paloalto防火墙CLI修改MGT IP

怎么样通过Cli修改MGT口的IP、掩码、网关、DNS呢&#xff1f; 1&#xff09;console连接上CLi&#xff0c;输入configure进入系统视图 输入exit&#xff0c;退出到用户视图 2&#xff09;在CLI修改带外管理MGT的IP地址、掩码、网关、DNS&#xff0c;默认带外管理是开启https、…