空间旋转与四元数

news2024/9/28 15:30:00

参考资料:https://krasjet.github.io/quaternion/quaternion.pdf

一、二维空间与复数

  1. 已知复数 z = a + b i z=a+bi z=a+bi,我们规定其向量表示形式 [ a b ] \left [ \begin{matrix}a\\b\end{matrix}\right ] [ab]。我们可以将其看成是复数域的两个基底 { 1 , i } \{1,i\} {1,i}的各自系数

  2. 对于复数 z 1 = a + b i , z 2 = c + d i z_1=a+bi,z_2=c+di z1=a+bi,z2=c+di,它们的乘积是 z 1 z 2 = ( a c − b d ) + ( b c + a d ) i = [ a − b b a ] [ c d ] z_1z_2=(ac-bd)+(bc+ad)i=\left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]\left [ \begin{matrix}c\\d\end{matrix}\right ] z1z2=(acbd)+(bc+ad)i=[abba][cd]

    对于这个结果,其右侧的 [ c d ] \left [ \begin{matrix}c\\d\end{matrix}\right ] [cd] z 2 z_2 z2的向量形式,而左边则是 z 1 z_1 z1矩阵表示形式 我们可以做一些尝试,比如 z 1 z 2 = [ a − b b a ] [ c − d d c ] = [ a c − b d − a d − b c a d + b c a c − b d ] z_1z_2=\left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]\left [ \begin{matrix}c&-d\\d&c\end{matrix}\right ]=\left [ \begin{matrix}ac-bd&-ad-bc\\ad+bc&ac-bd\end{matrix}\right ] z1z2=[abba][cddc]=[acbdad+bcadbcacbd],所以复数相乘就是各自的矩阵形式相乘的结果

    同时可以验证复数相乘时的交换律、结合律、分配律、 i 2 = − 1 i^2=-1 i2=1

  3. 复数的共轭 z ‾ = a − b i \overline{z}=a-bi z=abi,复数的模长 ∥ z ∥ = a 2 + b 2 = z z ‾ \left\| z\right\|=\sqrt{a^2+b^2}=\sqrt{z\overline{z}} z=a2+b2 =zz

  4. 复数的旋转可以从矩阵表示中窥见一二,对于复数 z = a + b i z=a+bi z=a+bi,考虑其矩阵表示 [ a − b b a ] = a 2 + b 2 [ a a 2 + b 2 − b a 2 + b 2 b a 2 + b 2 a a 2 + b 2 ] \left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]=\sqrt{a^2+b^2}\left [ \begin{matrix}\frac {a}{\sqrt{a^2+b^2}}&-\frac b {\sqrt{a^2+b^2}}\\ \frac b {\sqrt{a^2+b^2}}&\frac a {\sqrt{a^2+b^2}}\end{matrix}\right ] [abba]=a2+b2 [a2+b2 aa2+b2 ba2+b2 ba2+b2 a]
    将复数 z z z投射到复数坐标轴中,可以看到其矩阵表示可以表示为 [ ∥ z ∥ 0 0 ∥ z ∥ ] [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \left [ \begin{matrix}\left\| z\right\|&0\\0&\left\| z\right\|\end{matrix}\right ]\left [ \begin{matrix}\cos \theta&-\sin \theta \\ \sin \theta&\cos \theta\end{matrix}\right ] [z00z][cosθsinθsinθcosθ]
    https://krasjet.github.io/quaternion/quaternion.pdf
    其中 [ ∥ z ∥ 0 0 ∥ z ∥ ] \left [ \begin{matrix}\left\| z\right\|&0\\0&\left\| z\right\|\end{matrix}\right ] [z00z]是经典的放缩矩阵, [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \left [ \begin{matrix}\cos \theta&-\sin \theta \\ \sin \theta&\cos \theta\end{matrix}\right ] [cosθsinθsinθcosθ]是经典的旋转矩阵,所以复数相乘<=>对应矩阵形式相乘<=>旋转与缩放变换的复合
    同时可以验证,2D空间下的旋转是可以复合的,与次序无关。

二、三维空间下的旋转

定义:先假定旋转轴经过原点(如果不经过原点,则将旋转轴与待旋转物体 平移至旋转轴经过原点,完成旋转后再平移回去),这个旋转轴的单位向量 u = ( x , y , z ) T \mathbf{u}=(x,y,z)^T u=(x,y,z)T,待旋转物体我们简化为一个向量 v \mathbf{v} v,旋转角度为(逆时针方向) θ θ θ,注意接下来所有的分析与推导都是右手坐标系
在这里插入图片描述
向量分解
对待旋转向量进行分解 v = v ∥ + v ⊥ \mathbf{v}=\mathbf{v}_{\Vert}+\mathbf{v}_{\perp } v=v+v,分别为“平行于旋转轴 u \mathbf{u} u的分量”和“垂直于旋转轴 u \mathbf{u} u的分量”
在这里插入图片描述
其中“平行于旋转轴 u \mathbf{u} u的分量”是待旋转向量的投影,也即 v ∥ = ( u ⋅ v ) u \mathbf{v}_{\Vert}=(\mathbf{u}\cdot\mathbf{v})\mathbf{u} v=(uv)u;又由向量加减计算出垂直于旋转轴 u \mathbf{u} u的分量”,也即 v ⊥ = v − v ∥ = v − ( u ⋅ v ) u \mathbf{v}_{\perp}=\mathbf{v}-\mathbf{v}_{\Vert}=\mathbf{v}-(\mathbf{u}\cdot\mathbf{v})\mathbf{u} v=vv=v(uv)u

易知 v ∥ \mathbf{v}_{\Vert} v旋转多少度都不会发生变化,所以我们只需要考虑 v ⊥ \mathbf{v}_{\perp} v的旋转结果

在右手坐标系下,用叉乘计算出垂直于 v ⊥ , u \mathbf{v}_{\perp},\mathbf{u} v,u所在平面的另一向量 w = u × v ⊥ \mathbf{w}=\mathbf{u}\times\mathbf{v}_{\perp} w=u×v,那么把 v ⊥ , w \mathbf{v}_{\perp},\mathbf{w} v,w分别看成是二维平面的 X , Y X,Y X,Y轴,那么旋转后的向量 v ⊥ ′ \mathbf{v}'_{\perp} v的计算结果显而易见: v ⊥ ′ = v ⊥ cos ⁡ θ + ( u × v ⊥ ) sin ⁡ θ = v ⊥ cos ⁡ θ + ( u × v ) sin ⁡ θ \mathbf{v}'_{\perp}=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v}_{\perp})\sin \theta=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v})\sin \theta v=vcosθ+(u×v)sinθ=vcosθ+(u×v)sinθ
其中第二个等号来自叉乘的分配率 u × v ⊥ = u × ( v − v ∥ ) = u × v − u × v ∥ = u × v \mathbf{u}\times\mathbf{v}_{\perp}=\mathbf{u}\times(\mathbf{v}-\mathbf{v}_{\Vert})=\mathbf{u}\times\mathbf{v}-\mathbf{u}\times\mathbf{v}_{\Vert}=\mathbf{u}\times\mathbf{v} u×v=u×(vv)=u×vu×v=u×v

将两分量进行组合后,可得旋转后的向量 v ′ = cos ⁡ θ v + ( 1 − cos ⁡ θ ) ( u ⋅ v ) u + sin ⁡ θ ( u × v ) \mathbf{v}'=\cos\theta\mathbf{v}+(1-\cos\theta)(\mathbf{u}\cdot\mathbf{v})\mathbf{u}+\sin\theta(\mathbf{u}\times\mathbf{v}) v=cosθv+(1cosθ)(uv)u+sinθ(u×v)

三、四元数

四元数的定义与复数类似,但四元数有三个虚部和一个实部,也即四元数 q = a + b i + c j + d k q=a+bi+cj+dk q=a+bi+cj+dk,其中 a , b , c , d a,b,c,d a,b,c,d均为实数,而 i , j , k i,j,k i,j,k是虚基,满足 i 2 = j 2 = k 2 = i j k = − 1 i^2=j^2=k^2=ijk=-1 i2=j2=k2=ijk=1
类似地,四元数也可以写成向量形式 q = [ a b c d ] = [ a , v ] ,其中 v = [ b c d ] q=\left [\begin{matrix}a\\b\\c\\d\end{matrix}\right]=[a,\mathbf{v}],其中\mathbf{v}=\left [\begin{matrix}b\\c\\d\end{matrix}\right] q= abcd =[a,v],其中v= bcd

i 2 = j 2 = k 2 = i j k = − 1 i^2=j^2=k^2=ijk=-1 i2=j2=k2=ijk=1,我们可以推出 i j = k , k j = − i , i k = − j ij=k,kj=-i,ik=-j ij=k,kj=i,ik=j,全部结果如下所示(列为左乘,行为右乘)
在这里插入图片描述

四元数的模长、加法、数乘与复数基本类似,但乘法不一样,四元数的乘法满足分配率和结合律,但不满足交换律

具体来说,对于 q 1 = [ a 1 b 1 c 1 d 1 ] = [ a 1 , v 1 ] , q 2 = [ a 2 b 2 c 2 d 2 ] = [ a 2 , v 2 ] q_1=\left [\begin{matrix}a_1\\b_1\\c_1\\d_1\end{matrix}\right]=[a_1,\mathbf{v}_1],q_2=\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_2,\mathbf{v}_2] q1= a1b1c1d1 =[a1,v1],q2= a2b2c2d2 =[a2,v2],其中 v 1 = [ b 1 c 1 d 1 ] , v 2 = [ b 2 c 2 d 2 ] \mathbf{v}_1=\left [\begin{matrix}b_1\\c_1\\d_1\end{matrix}\right],\mathbf{v}_2=\left [\begin{matrix}b_2\\c_2\\d_2\end{matrix}\right] v1= b1c1d1 ,v2= b2c2d2 ,他们的乘积结果为

q 1 q 2 = [ a 1 − b 1 − c 1 − d 1 b 1 a 1 − d 1 c 1 c 1 d 1 a 1 − b 1 d 1 − c 1 b 1 a 1 ] [ a 2 b 2 c 2 d 2 ] = [ a 1 a 2 − v 1 ⋅ v 2 , a 1 v 2 + a 2 v 1 + v 1 × v 2 ] q_1q_2=\left [\begin{matrix}a_1&-b_1&-c_1&-d_1\\ b_1&a_1&-d_1&c_1\\ c_1&d_1&a_1&-b_1\\ d_1&-c_1&b_1&a_1\end{matrix}\right ]\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_1a_2-\mathbf{v}_1\cdot \mathbf{v}_2,a_1\mathbf{v}_2+a_2\mathbf{v}_1+\mathbf{v}_1\times \mathbf{v}_2] q1q2= a1b1c1d1b1a1d1c1c1d1a1b1d1c1b1a1 a2b2c2d2 =[a1a2v1v2,a1v2+a2v1+v1×v2]

注意上式左边的矩阵各系数是由 { 1 , i , j , k } \{1,i,j,k\} {1,i,j,k}乘积结果的 4 × 4 4\times 4 4×4计算表格得出的。

与左乘类似,四元数的右乘也可以写成矩阵形式
q 2 q 1 = [ a 1 − b 1 − c 1 − d 1 b 1 a 1 d 1 − c 1 c 1 − d 1 a 1 b 1 d 1 c 1 − b 1 a 1 ] [ a 2 b 2 c 2 d 2 ] = [ a 1 a 2 − v 1 ⋅ v 2 , a 1 v 2 + a 2 v 1 − v 1 × v 2 ] q_2q_1=\left [\begin{matrix}a_1&-b_1&-c_1&-d_1\\ b_1&a_1&d_1&-c_1\\ c_1&-d_1&a_1&b_1\\ d_1&c_1&-b_1&a_1\end{matrix}\right ]\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_1a_2-\mathbf{v}_1\cdot \mathbf{v}_2,a_1\mathbf{v}_2+a_2\mathbf{v}_1-\mathbf{v}_1\times \mathbf{v}_2] q2q1= a1b1c1d1b1a1d1c1c1d1a1b1d1c1b1a1 a2b2c2d2 =[a1a2v1v2,a1v2+a2v1v1×v2]


引入概念:纯四元数,意为实部为0的四元数,也即 v = [ 0 , v ] v=[0,\mathbf{v}] v=[0,v],我们用 v v v来表示一个纯四元数 [ 0 , v ] [0,\mathbf{v}] [0,v]
引入概念:四元数的逆,对于一个四元数 q q q来说,其逆 q − 1 q^{-1} q1满足 q q − 1 = q − 1 q = 1 qq^{-1}=q^{-1}q=1 qq1=q1q=1
引入概念:四元数的共轭,对于一个四元数 q q q来说,其共轭 q ∗ = [ a , − v ] q^{*}=[a,-\mathbf{v}] q=[a,v],所以根据上面推导的四元数的乘法可得 q ∗ q = q q ∗ = [ a 2 + v ⋅ v , 0 ] = ∥ q ∥ 2 q^{*}q=qq^{*}=[a^2+\mathbf{v}\cdot \mathbf{v},0]=\Vert q\Vert^2 qq=qq=[a2+vv,0]=q2

所以建立起逆和共轭的关系 q − 1 = q ∗ ∥ q ∥ 2 q^{-1}=\cfrac{q^*}{\Vert q\Vert^2} q1=q2q,且当 q q q为单位四元数( ∥ q ∥ 2 = 1 \Vert q\Vert^2=1 q2=1)时,其共轭与逆相等。

现在考虑用四元数来建立表示向量 v \mathbf{v} v的垂直部分 v ⊥ \mathbf{v}_{\perp} v绕旋转轴 u \mathbf{u} u的旋转过程:
将三维向量划归为纯四元数 v ⊥ = [ 0 , v ⊥ ] , v ⊥ ′ = [ 0 , v ⊥ ′ ] , v = [ 0 , v ] , u = [ 0 , u ] v_{\perp}=[0,\mathbf{v}_{\perp}],v'_{\perp}=[0,\mathbf{v}'_{\perp}],v=[0,\mathbf{v}],u=[0,\mathbf{u}] v=[0,v],v=[0,v],v=[0,v],u=[0,u]

又根据四元数乘法可得 u v ⊥ = [ − u ⋅ v ⊥ , u × v ⊥ ] = [ 0 , u × v ⊥ ] uv_{\perp}=[-\mathbf{u}\cdot\mathbf{v}_{\perp},\mathbf{u}\times\mathbf{v}_{\perp}]=[0,\mathbf{u}\times\mathbf{v}_{\perp}] uv=[uv,u×v]=[0,u×v]

最后将第二节中的垂直分量旋转后的计算结果 v ⊥ ′ = v ⊥ cos ⁡ θ + ( u × v ⊥ ) sin ⁡ θ \mathbf{v}'_{\perp}=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v}_{\perp})\sin \theta v=vcosθ+(u×v)sinθ转化为四元数的形式
v ⊥ ′ = v ⊥ cos ⁡ θ + u v ⊥ sin ⁡ θ v'_{\perp}=v_{\perp}\cos\theta+uv_{\perp}\sin \theta v=vcosθ+uvsinθ

定义四元数 q = [ cos ⁡ θ , sin ⁡ θ u ] q=[\cos\theta,\sin\theta \mathbf{u}] q=[cosθ,sinθu],则 v ⊥ ′ = q v ⊥ v'_{\perp}=qv_{\perp} v=qv,且有
v ′ = v ∥ + q v ⊥ v'=v_{\Vert}+qv_{\perp} v=v+qv

如何把形式更进一步?
考虑 p = [ cos ⁡ θ 2 , sin ⁡ θ 2 u ] p=[\cos\frac \theta 2,\sin \frac \theta 2\mathbf{u}] p=[cos2θ,sin2θu],则有 p 2 = [ cos ⁡ 2 θ 2 − sin ⁡ 2 θ 2 , 2 sin ⁡ θ 2 cos ⁡ θ 2 u ] = [ cos ⁡ θ , sin ⁡ θ u ] = q p^2=[\cos^2\frac \theta 2-\sin^2\frac \theta 2,2\sin\frac \theta 2\cos\frac \theta 2\mathbf{u}]=[\cos\theta,\sin\theta\mathbf{u}]=q p2=[cos22θsin22θ,2sin2θcos2θu]=[cosθ,sinθu]=q
∥ p ∥ = 1 , p − 1 = p ∗ ∥ p ∥ 2 = p ∗ = [ cos ⁡ θ 2 , − sin ⁡ θ 2 u ] \Vert p\Vert =1,p^{-1}=\cfrac{p^*}{\Vert p\Vert^2}=p^{*}=[\cos\frac \theta 2,-\sin \frac \theta 2\mathbf{u}] p=1,p1=p2p=p=[cos2θ,sin2θu]

因此有
v ′ = v ∥ + q v ⊥ = p p ∗ v ∥ + p p v ⊥ v'=v_{\Vert}+qv_{\perp}=pp^{*}v_{\Vert}+ppv_{\perp} v=v+qv=ppv+ppv

这个公式的几何解释:平行于旋转轴的分量不变,将垂直分量连续2次旋转 θ 2 \frac \theta 2 2θ的角度

对于 p ∗ v ∥ p^{*}v_{\Vert} pv,由于 v ∥ × u = 0 \mathbf{v}_{\Vert}\times \mathbf{u}=0 v×u=0,所以其满足交换律 p ∗ v ∥ = v ∥ p ∗ p^{*}v_{\Vert}=v_{\Vert}p^{*} pv=vp
对于 p v ⊥ pv_{\perp} pv,由于 v ⊥ × u = − u × v ⊥ \mathbf{v}_{\perp}\times \mathbf{u}=-\mathbf{u}\times \mathbf{v}_{\perp} v×u=u×v v ⊥ ⋅ u = 0 \mathbf{v}_{\perp}\cdot\mathbf{u}=0 vu=0,所以有 p v ⊥ = v ⊥ p ∗ pv_{\perp}=v_{\perp}p^* pv=vp
经过代换后,由分配率可得 v ′ = p ( v ∥ + v ⊥ ) p ∗ = p v p ∗ v'=p(v_{\Vert}+v_{\perp})p^*=pvp^* v=p(v+v)p=pvp

总结一下,对于三维空间下的旋转,假定旋转轴经过原点(如果不经过,则对旋转轴与待旋转点一起平移),其所在直线的单位向量为 u \mathbf{u} u,待旋转点为 v \mathbf{v} v,旋转角度为(逆时针) θ \theta θ,旋转后的点为 v ′ \mathbf{v}' v,那么定义四元数 v = [ 0 , v ] , v ′ = [ 0 , v ′ ] , u = [ 0 , u ] , p = [ cos ⁡ θ 2 , sin ⁡ θ 2 u ] v=[0,\mathbf{v}],v'=[0,\mathbf{v}'],u=[0,\mathbf{u}],p=[\cos\frac \theta 2,\sin\frac \theta 2\mathbf{u}] v=[0,v],v=[0,v],u=[0,u],p=[cos2θ,sin2θu],则旋转后的点位置为
v ′ = p v p ∗ v'=pvp^* v=pvp

进一步考虑矩阵形式,令 a = cos ⁡ θ 2 , b = sin ⁡ θ 2 u x , c = sin ⁡ θ 2 u y , d = sin ⁡ θ 2 u z a=\cos \frac \theta 2,b=\sin\frac \theta 2u_x,c=\sin\frac \theta 2u_y,d=\sin\frac \theta 2u_z a=cos2θ,b=sin2θux,c=sin2θuy,d=sin2θuz
a 2 + b 2 + c 2 + d 2 = 1 a^2+b^2+c^2+d^2=1 a2+b2+c2+d2=1,且由左乘和右乘矩阵的
v ′ = p v p ∗ = [ a − b − c − d b a − d c c d a − b d − c b a ] [ a − b − c − d b a d − c c − d a b d c − b a 1 ] v = [ 1 0 0 0 0 1 − 2 c 2 − 2 d 2 2 b c − 2 a d 2 a c + 2 b d 0 2 b c + 2 a d 1 − 2 b 2 − 2 d 2 2 c d − 2 a b 0 2 b d − 2 a c 2 a b + 2 c d 1 − 2 b 2 − 2 c 2 ] v v'=pvp^*=\left [\begin{matrix}a&-b&-c&-d\\ b&a&-d&c\\ c&d&a&-b\\ d&-c&b&a\end{matrix}\right ] \left [\begin{matrix}a&-b&-c&-d\\ b&a&d&-c\\ c&-d&a&b\\ d&c&-b&a_1\end{matrix}\right ]v =\left [\begin{matrix}1&0&0&0\\ 0&1-2c^2-2d^2&2bc-2ad&2ac+2bd\\ 0&2bc+2ad&1-2b^2-2d^2&2cd-2ab\\ 0&2bd-2ac&2ab+2cd&1-2b^2-2c^2\end{matrix}\right ]v v=pvp= abcdbadccdabdcba abcdbadccdabdcba1 v= 1000012c22d22bc+2ad2bd2ac02bc2ad12b22d22ab+2cd02ac+2bd2cd2ab12b22c2 v

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

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

相关文章

【生日视频制作】美女举牌变魔术卡牌AE模板修改文字软件生成器教程特效素材【AE模板】

美女举牌变魔术卡牌生日视频制作教程AE模板改字软件生成器素材 怎么如何做的【生日视频制作】美女举牌变魔术卡牌AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

活动|华院计算惊艳亮相第十届博博会,以AI驱动数智文博

2024年8月23日至26日&#xff0c;第十届“中国博物馆及相关产品与技术博览会”&#xff08;以下简称“博博会”&#xff09;花落草原都市内蒙古自治区呼和浩特市敕勒川国际会展中心。“博博会”自2004年创办以来&#xff0c;已成功在多个城市举办&#xff0c;成为我国文博界最具…

C语言 ——— 文件的随机读写

目录 学习并使用fseek函数​编辑 学习并使用ftell函数​编辑 学习并使用rewind函数​编辑 学习并使用fseek函数 函数的功能&#xff1a; 根据文件指针的位置和偏移量来定位文件指针 函数的参数&#xff1a; FILE* stream&#xff1a;文件类型的指针 long int offset&am…

英飞凌HSM内核开发-软件工程介绍

介绍 一个具有HSM核心的安全软件解决方案至少由两个项目组成&#xff1a; 一个用于HSM&#xff08;即“veHsm配置”&#xff09;。一个用于主机&#xff08;即“主机配置”&#xff09;。 如果主机核心上的软件包含第三个AUTOSAR基础软件&#xff08;BSW&#xff09;堆栈&#…

无人机校企合作:组装、维修、研发全面提升学生技能方好就业

无人机校企合作在组装、维修、研发等方面全面提升学生技能&#xff0c;进而促进学生就业&#xff0c;是一个具有前瞻性和实践性的教育模式。以下是对该合作模式的详细分析&#xff1a; 一、合作背景与意义 随着无人机技术的快速发展和广泛应用&#xff0c;市场对无人机专业人…

行情能反转吗?想开个两融账户融资融券利率最低多少?

今日早盘指数放量大涨&#xff0c;走出大阳线。电子板块表现活跃&#xff0c;银行板块表现落后。截止11点30分&#xff0c;上证指数涨1.34%&#xff0c;深成指涨2.80%&#xff0c;创业板指涨3%&#xff0c;北证50指数涨2.38%。市场放量上涨是否迎来拐点&#xff1f;不妨大胆预测…

指针初阶(数组指针与二维数组)

0.二维数组特性 ①.存储格式 二维数组&#xff0c;在存储空间内的存储顺序是连续存储&#xff0c;按行优先存。 假设定义一个2X3的数组&#xff0c;其在存储空间的存储格式如下&#xff1a; ②.表示方法 且二维数组还有一个特性&#xff0c;例如有二维数组 a[3][2] ,那么 a[0] …

关于SSL认证后出现的http和https无法同时访问问题

--痛苦是人最好的试金石 Pain is mans best litmus test 问题&#xff1a; 我现在在我的Tomcat上面加了一个SSL 认证&#xff0c;但是我就是指认证了一个xxx.xxx.com的域名&#xff0c;我其他的域名 也在同一个server.xml配置文件中&#xff0c;现在xxx.xx.com可以https可以使用…

策略模式+模版方法模式+简单工厂模式混用优化代码复杂分支问题

说明 这篇博客是在复杂场景使用策略和工厂模式代替分支语句升级版&#xff0c;增加了模版方法模式。将支付类的公共逻辑抽取到模板类中&#xff0c;使整个支付逻辑更加灵活&#xff0c;进一步优化了代码结构&#xff0c;提升了软件的可维护性和可读性。 流程图如下 先看一遍流…

接口自动化面试题放送,助你离Offer又近一步

Hi&#xff0c;大家好&#xff0c;网传金九银十&#xff0c;其实只要技术过硬&#xff0c;准备充分&#xff0c;任何时候都是找工作的黄金时期。时值五月&#xff0c;今天继续分享一波接口自动化面试题&#xff0c;为你的面试助攻&#xff0c;欢迎在留言区评论喔。 请问你是如…

大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

全新一代理想智能驾驶开启万人体验团招募,OTA 6.2正式全量推送

核心信息&#xff1a; 无图NOA正式推送后&#xff0c;截至7月30日&#xff0c;理想汽车城市NOA日均里程提升3倍&#xff0c;城市NOA日均活跃度提升8倍理想全国门店开启无图NOA试驾后&#xff0c;门店NOA试驾率实现倍增&#xff0c;30万元以上车型AD Max销量占比达到70%理想端到…

NoSQL:数据库领域的“新潮力量”——从起源到未来的全面解析

引言 曾几何时&#xff0c;关系型数据库&#xff08;RDBMS&#xff09;就是数据管理的“老大哥”&#xff0c;一统江湖&#xff0c;所向披靡。然而&#xff0c;随着大数据时代的到来&#xff0c;数据量像火箭般飙升&#xff0c;数据的形态也变得越来越“随性”&#xff0c;传统…

一文盘点:性能测试常见的7大指标(文末送性能测试题库)

01性能指标分类 系统性能指标 资源性能指标 中间件指标 数据库指标 稳定性指标 可扩展性指标 可靠性指标 1、系统性能指标 响应时间 系统处理能力 吞吐量 并发用户数 错误率 2、资源性能指标 CPU 內存 磁盘吞吐量 网络吞吐量 3、中间件指标 常用的中间件例如…

webstorm最新激活码

最智能的 JavaScript IDE WebStorm 是一个适用于 JavaScript 和相关技术的集成开发环境。类似于其他 JetBrains IDE&#xff0c;它也会使您的开发体验更有趣&#xff0c;自动执行常规工作并帮助您轻松处理复杂任务。 激活码获取地址 https://web.52shizhan.cn/activity/webs…

微信小程序用web-view实现内嵌h5页面

需求&#xff1a; 在微信小程序里面使用web-view内嵌一个h5页面&#xff0c;并且从h5页面还可以跳到小程序的某个页面 目录 需求&#xff1a; 小程序web-view内嵌h5页面 配置&#xff1a; code&#xff1a; 在h5页面跳转到小程序的某个页面 嵌入sdk&#xff1a; code&…

servlet的过滤器filter和springmvc的拦截器Interceptor

背景 Servlet的过滤器&#xff08;Filter&#xff09;和Spring MVC的拦截器&#xff08;Interceptor&#xff09;都是用于在请求处理过程中对请求进行拦截和处理的组件。它们之间的主要区别在于它们的作用范围和使用方式。 作用范围 Filter&#xff1a;过滤器是基于Servlet规范…

性价比运动耳机排行榜有哪些上榜?排行榜五大人气机型分享!

开放式蓝牙耳机最近异常火热&#xff0c;不是因为开放式耳机技术含量有多高&#xff0c;而是它从另一个层面&#xff0c;给了很多追求佩戴舒适&#xff0c;又讲究卫生、安全的玩家一种完美的方案。相对于入耳式耳机它又有独特的视听魅力。相比传统入耳式耳机&#xff0c;开放式…

运动耳机哪个牌子的质量好?五款口碑绝佳机型安利!

​现在耳机市场上&#xff0c;开放式耳机因为外观时尚、戴着舒服&#xff0c;成了大家日常爱用的热门货。但是&#xff0c;市面上的开放式耳机品牌多得眼花缭乱&#xff0c;质量也是高低不一&#xff0c;让人挑花了眼。作为一个搞了三年耳机评测的博主&#xff0c;我还是个耳机…

五、工程化开发和脚手架Vue CLI

开发 Vue 的两种方式: 1.核心包传统开发模式:基于 html/css/js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue. 2.工程化开发模式:基于构建工具(例如:webpack)的环境中开发 Vue。 一、基本介绍&#xff1a; Vue CLl 是 Vue 官方提供的一个可以帮助我们快速创建一个开发…