【數理知識】三維空間旋轉矩陣的歐拉角表示法,四元數表示法,兩者之間的轉換,Matlab 代碼實現

序號內容
1【數理知識】自由度 degree of freedom 及自由度的計算方法
2【數理知識】剛體 rigid body 及剛體的運動
3【數理知識】剛體基本運動,平動,轉動
4【數理知識】向量數乘,內積,外積,matlab代碼實現
5【數理知識】最小二乘法,從線性回歸出發,數值舉例并用最小二乘法求解回歸模型
6【數理知識】最小二乘法,一般線性情況,矩陣化表示過程,最佳參數的求解公式過程
7【數理知識】協方差,隨機變量的的協方差,隨機變量分別是單個數字和向量時的協方差
8【數理知識】奇異值分解,從數據的線性變換角度來理解
9【數理知識】旋轉矩陣的推導過程,基于向量的旋轉來實現,同時解決歐式變換的非線性局限
10【數理知識】三維空間旋轉矩陣的歐拉角表示法,四元數表示法,兩者之間的轉換,Matlab 代碼實現
11【數理知識】已知 N>=3 個點在前后時刻的坐標,求剛體平移矩陣,旋轉矩陣,且這 N>=3 點間距離始終不變代表一個剛體

文章目錄

  • 1. 歐拉角(Euler Angles)表示法
  • 2. 四元數(Quaternion)表示法
  • 3. 四元數轉歐拉角
  • 4. 歐拉角轉四元數
  • Ref

之前我們已經討論過旋轉矩陣。需要再次強調的是,旋轉的順序很重要,并且會影響最終的結果。先旋轉 X X X 軸,再旋轉 Y Y Y 軸,最后旋轉 Z Z Z 軸得到的結果與先旋轉 Z Z Z 軸,再旋轉 Y Y Y 軸,最后旋轉 X X X 軸得到的結果是不同的。這種順序的差異導致了不同的方向和空間方向的變化。這也是為什么在實際應用中,我們需要明確指定旋轉順序,以確保我們得到正確和一致的結果。

這次基于三維空間,討論下旋轉矩陣的兩種表示方法,分別是歐拉角表示法,四元數表示法,以及二者之間的轉換關系如何。

在三維空間中,旋轉矩陣 R R R 的維度為 3 × 3 3 \times 3 3×3,其是一個正交矩陣,行列式為 1 1 1

1. 歐拉角(Euler Angles)表示法

歐拉角通常由三個角度組成

  • 滾轉角(roll),常用符號為 ? \phi ?
  • 俯仰角(pitch),常用符號為 θ \theta θ
  • 偏航角(yaw),常用符號為 ψ \psi ψ

這三個角度分別描述了繞 X , Y , Z X, Y, Z X,Y,Z 軸旋轉的角度。

X X X 軸旋轉 ? \phi ? 角度的旋轉矩陣為

R x ( ? ) = [ 1 0 0 0 cos ? ( ? ) ? sin ? ( ? ) 0 sin ? ( ? ) cos ? ( ? ) ] R_x(\phi) = \left[\begin{matrix} 1 & 0 & 0 \\ 0 & \cos(\phi) & -\sin(\phi) \\ 0 & \sin(\phi) & \cos(\phi) \\ \end{matrix}\right] Rx?(?)= ?100?0cos(?)sin(?)?0?sin(?)cos(?)? ?

Y Y Y 軸旋轉 θ \theta θ 角度的旋轉矩陣為

R y ( θ ) = [ cos ? ( θ ) 0 sin ? ( θ ) 0 1 0 ? sin ? ( θ ) 0 cos ? ( θ ) ] R_y(\theta) = \left[\begin{matrix} \cos(\theta) & 0 & \sin(\theta) \\ 0 & 1 & 0 \\ -\sin(\theta) & 0 & \cos(\theta) \\ \end{matrix}\right] Ry?(θ)= ?cos(θ)0?sin(θ)?010?sin(θ)0cos(θ)? ?

Z Z Z 軸旋轉 ψ \psi ψ 角度的旋轉矩陣為

R z ( ψ ) = [ cos ? ( ψ ) ? sin ? ( ψ ) 0 sin ? ( ψ ) cos ? ( ψ ) 0 0 0 1 ] R_z(\psi) = \left[\begin{matrix} \cos(\psi) & -\sin(\psi) & 0 \\ \sin(\psi) & \cos(\psi) & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right] Rz?(ψ)= ?cos(ψ)sin(ψ)0??sin(ψ)cos(ψ)0?001? ?

例如,對于一個分別依次繞固定軸 X Y Z XYZ XYZ 的歐拉角表示,其旋轉矩陣為

R = R z ( ? ) R y ( θ ) R x ( ψ ) = [ cos ? ( θ ) cos ? ( ψ ) sin ? ( ? ) sin ? ( θ ) cos ? ( ψ ) ? cos ? ( ? ) sin ? ( ψ ) cos ? ( ? ) sin ? ( θ ) cos ? ( ψ ) + sin ? ( ? ) sin ? ( ψ ) cos ? ( θ ) sin ? ( ψ ) sin ? ( ? ) sin ? ( θ ) sin ? ( ψ ) + cos ? ( ? ) cos ? ( ψ ) cos ? ( ? ) sin ? ( θ ) sin ? ( ψ ) ? sin ? ( ? ) cos ? ( ψ ) ? sin ? ( θ ) sin ? ( ? ) cos ? ( θ ) cos ? ( ? ) cos ? ( θ ) ] \begin{aligned} R &= R_z(\phi) R_y(\theta) R_x(\psi) \\ &= \left[\begin{matrix} \cos(\theta)\cos(\psi) & \sin(\phi)\sin(\theta)\cos(\psi) - \cos(\phi)\sin(\psi) & \cos(\phi)\sin(\theta)\cos(\psi) + \sin(\phi)\sin(\psi) \\ \cos(\theta)\sin(\psi) & \sin(\phi)\sin(\theta)\sin(\psi) + \cos(\phi)\cos(\psi) & \cos(\phi)\sin(\theta)\sin(\psi) - \sin(\phi)\cos(\psi) \\ -\sin(\theta) & \sin(\phi)\cos(\theta) & \cos(\phi)\cos(\theta) \\ \end{matrix}\right] \end{aligned} R?=Rz?(?)Ry?(θ)Rx?(ψ)= ?cos(θ)cos(ψ)cos(θ)sin(ψ)?sin(θ)?sin(?)sin(θ)cos(ψ)?cos(?)sin(ψ)sin(?)sin(θ)sin(ψ)+cos(?)cos(ψ)sin(?)cos(θ)?cos(?)sin(θ)cos(ψ)+sin(?)sin(ψ)cos(?)sin(θ)sin(ψ)?sin(?)cos(ψ)cos(?)cos(θ)? ??

這個矩陣代表了首先繞 X X X 軸旋轉 ? \phi ? 角,然后繞 Y Y Y 軸旋轉 θ \theta θ 角,再然后繞 Z Z Z 軸旋轉 ψ \psi ψ 角的總的旋轉效果。

更多關于歐拉角的推導和細節可參考文章:第3章-數理知識基礎 -> 坐標轉換和【數理知識】旋轉矩陣的推導過程,基于向量的旋轉來實現,同時解決歐式變換的非線性局限。

% 給定歐拉角 phi theta psi
phi   = deg2rad(10);  % 示例:10度,記得轉換為弧度
theta = deg2rad(22);  % 示例:22度
psi   = deg2rad(35);  % 示例:35度R_x = [ 1  0         00  cos(phi) -sin(phi)0  sin(phi)  cos(phi)];R_y = [ cos(theta)  0  sin(theta)0           1  0-sin(theta)  0  cos(theta)];R_z = [ cos(psi) -sin(psi)  0sin(psi)  cos(psi)  00         0         1];R = R_z * R_y * R_x;R = [cos(theta)*cos(psi)  sin(phi)*sin(theta)*cos(psi)-cos(phi)*sin(psi)  cos(phi)*sin(theta)*cos(psi)+sin(phi)*sin(psi)cos(theta)*sin(psi)  sin(phi)*sin(theta)*sin(psi)+cos(phi)*cos(psi)  cos(phi)*sin(theta)*sin(psi)-sin(phi)*cos(psi)-sin(theta)           sin(phi)*cos(theta)                             cos(phi)*cos(theta)];
R =0.7595   -0.5116    0.40180.5318    0.8440    0.0694-0.3746    0.1610    0.9131

% 給定點坐標
point_1 = [ 102235];
point_2 = R * point_1;figure()
scatter3(point_1(1), point_1(2), point_1(3), 150, 'r'); hold on;
scatter3(point_2(1), point_2(2), point_2(3), 150, 'b');

請添加圖片描述


2. 四元數(Quaternion)表示法

四元數是由 1 1 1 個實數加上 3 3 3 個復數組合而成,通常可以表示為

q = q w + q x i + q y j + q z k q = q_w + q_x \text{i} + q_y \text{j} + q_z \text{k} q=qw?+qx?i+qy?j+qz?k

其中 q w , q x , q y , q z q_w, q_x, q_y, q_z qw?,qx?,qy?,qz? 都是實數, i,?j,?k \text{i, j, k} i,?j,?k 是四元數的基元,滿足如下所示的乘法關系

  • i 2 = j 2 = k 2 = ijk = ? 1 \text{i}^2 = \text{j}^2 = \text{k}^2 = \text{i}\text{j}\text{k} = -1 i2=j2=k2=ijk=?1
  • i 0 = j 0 = k 0 = 1 \text{i}^0 = \text{j}^0 = \text{k}^0 = 1 i0=j0=k0=1

四元數還可看作由一個標量和一個向量組成,其中 q w q_w qw? 是四元數的標量部分, q x , q y , q z q_x, q_y, q_z qx?,qy?,qz? 構成四元數的向量部分。


假設有兩個四元數分別為 q 1 = ( q w 1 , [ q x 1 , q y 1 , q z 1 ] ) q_1 = (q_{w1}, [q_{x1}, q_{y1}, q_{z1}]) q1?=(qw1?,[qx1?,qy1?,qz1?]) q 2 = ( q w 2 , [ q x 2 , q y 2 , q z 2 ] ) q_2 = (q_{w2}, [q_{x2}, q_{y2}, q_{z2}]) q2?=(qw2?,[qx2?,qy2?,qz2?]),同時令 v 1 = [ q x 1 , q y 1 , q z 1 ] v_1 = [q_{x1}, q_{y1}, q_{z1}] v1?=[qx1?,qy1?,qz1?] v 2 = [ q x 2 , q y 2 , q z 2 ] v_2 = [q_{x2}, q_{y2}, q_{z2}] v2?=[qx2?,qy2?,qz2?],則有如下運算法則

  • 四元數的和: q 1 + q 2 = ( q w 1 + q w 2 , ( v 1 + v 2 ) ) q_1 + q_2 = (q_{w1}+q_{w2}, (v_1 +v_2)) q1?+q2?=(qw1?+qw2?,(v1?+v2?))
  • 四元數乘法: q 1 q 2 = q w 1 q w 2 ? v 1 ? v 2 + q w 1 v 2 + q w 2 v 1 + v 1 × v 2 = ( q w 1 q w 2 ? v 1 ? v 2 , ( q w 1 v 2 + q w 2 v 1 + v 1 × v 2 ) ) q_1 q_2 = q_{w1} q_{w2} - v_1 \cdot v_2 + q_{w1} v_2 + q_{w2} v_1 + v_1 \times v_2 = (q_{w1} q_{w2} - v_1 \cdot v_2, (q_{w1} v_2 + q_{w2} v_1 + v_1 \times v_2)) q1?q2?=qw1?qw2??v1??v2?+qw1?v2?+qw2?v1?+v1?×v2?=(qw1?qw2??v1??v2?,(qw1?v2?+qw2?v1?+v1?×v2?))
  • 四元數的模: ∥ q 1 ∥ = q w 1 2 + q x 1 2 + q y 1 2 + q z 1 2 \|q_1\| = \sqrt{q_{w1}^2 + q_{x1}^2 + q_{y1}^2 + q_{z1}^2} q1?=qw12?+qx12?+qy12?+qz12? ?
  • 單位四元數: ∥ q 1 ∥ = 1 \|q_1\| = 1 q1?=1
  • 四元數的共軛: q 1 ? = ( q w 1 , ? v 1 ) q_1^* = (q_{w1}, -v_1) q1??=(qw1?,?v1?)
  • 四元數的逆: q 1 ? 1 = q 1 ? ∥ q 1 ∥ q_1^{-1} = \frac{q_1^*}{\|q_1\|} q1?1?=q1?q1???

四元數是一個擴展的復數系統,常用于表示三維空間中的旋轉。

一個單位四元數(長度為 1 1 1)可以表示 3D 空間中的旋轉。將一個點旋轉到另一個位置可以通過四元數乘法來完成。

X X X 軸旋轉 ? \phi ? 角度的四元數為

q ? = ( cos ? ( ? 2 ) , sin ? ( ? 2 ) , 0 , 0 ) q_\phi = (\cos(\frac{\phi}{2}), \sin(\frac{\phi}{2}), 0, 0) q??=(cos(2??),sin(2??),0,0)

Y Y Y 軸旋轉 θ \theta θ 角度的四元數為

q θ = ( cos ? ( θ 2 ) , 0 , sin ? ( θ 2 ) , 0 , 0 ) q_\theta = (\cos(\frac{\theta}{2}), 0, \sin(\frac{\theta}{2}), 0, 0) qθ?=(cos(2θ?),0,sin(2θ?),0,0)

Z Z Z 軸旋轉 ψ \psi ψ 角度的四元數為

q ψ = ( cos ? ( ψ 2 ) , 0 , 0 , sin ? ( ψ 2 ) ) q_\psi = (\cos(\frac{\psi}{2}), 0, 0, \sin(\frac{\psi}{2})) qψ?=(cos(2ψ?),0,0,sin(2ψ?))

總旋轉的四元數是這三個四元數的乘積。四元數乘法不是通常的標量乘法,它有特定的乘法規則。

給定一個四元數 q q q(模長為 1,有關系 q w 2 + q x 2 + q y 2 + q z 2 = 1 \sqrt{q_w^2+q_x^2+q_y^2+q_z^2}=1 qw2?+qx2?+qy2?+qz2? ?=1),假設采用的旋轉順序為 X Y Z XYZ XYZ,其對應的旋轉矩陣 R R R 可以表示為

R = [ 1 ? 2 ( q y 2 + q z 2 ) 2 ( q x q y ? q w q z ) 2 ( q x q z + q w q y ) 2 ( q x q y + q w q z ) 1 ? 2 ( q x 2 + q z 2 ) 2 ( q y q z ? q w q x ) 2 ( q x q z ? q w q y ) 2 ( q y q z + q w q x ) 1 ? 2 ( q x 2 + q y 2 ) ] \begin{aligned} R &= \left[\begin{matrix} 1 - 2(q_y^2 + q_z^2) & 2(q_x q_y - q_w q_z) & 2(q_x q_z + q_w q_y) \\ 2(q_x q_y + q_w q_z) & 1 - 2(q_x^2 + q_z^2) & 2(q_y q_z - q_w q_x) \\ 2(q_x q_z - q_w q_y) & 2(q_y q_z + q_w q_x) & 1 - 2(q_x^2 + q_y^2) \\ \end{matrix}\right] \end{aligned} R?= ?1?2(qy2?+qz2?)2(qx?qy?+qw?qz?)2(qx?qz??qw?qy?)?2(qx?qy??qw?qz?)1?2(qx2?+qz2?)2(qy?qz?+qw?qx?)?2(qx?qz?+qw?qy?)2(qy?qz??qw?qx?)1?2(qx2?+qy2?)? ??

單位四元數在描述 3D 旋轉時有一些優勢,其不受歐拉角中的 “萬向鎖” 問題的影響。

% 給定四元數
quaternion = [0.9376  0.0244  0.2070  0.2782];  q_w = quaternion(1);
q_x = quaternion(2);
q_y = quaternion(3);
q_z = quaternion(4);% 計算旋轉矩陣 R
R(1,1) = 1 - 2*(q_y^2 + q_z^2);
R(1,2) = 2*(q_x*q_y - q_w*q_z);
R(1,3) = 2*(q_x*q_z + q_w*q_y);
R(2,1) = 2*(q_x*q_y + q_w*q_z);
R(2,2) = 1 - 2*(q_x^2 + q_z^2);
R(2,3) = 2*(q_y*q_z - q_w*q_x);
R(3,1) = 2*(q_x*q_z - q_w*q_y);
R(3,2) = 2*(q_y*q_z + q_w*q_x);
R(3,3) = 1 - 2*(q_x^2 + q_y^2);
R =0.7595   -0.5116    0.40170.5318    0.8440    0.0694-0.3746    0.1609    0.9131

3. 四元數轉歐拉角

從四元數到歐拉角的轉換并不是唯一的,因為對于某些旋轉,存在多種歐拉角表示。但是,對于大多數實際應用,可以從一個特定的四元數計算一個特定的歐拉角集。

給定四元數 q = ( q w , q x , q y , q z ) q = (q_w, q_x, q_y, q_z) q=(qw?,qx?,qy?,qz?),若想將它轉換為 X Y Z XYZ XYZ 順序的歐拉角 ( ? , θ , ψ ) (\phi, \theta, \psi) (?,θ,ψ)。以下是從四元數到歐拉角的轉換方法

? = atan2 ( 2 ( q w q x + q y q z ) , 1 ? 2 ( q x 2 + q y 2 ) ) θ = arcsin ? ( 2 ( q w q y ? q x q z ) ) ψ = atan2 ( 2 ( q w q z + q x q y ) , 1 ? 2 ( q y 2 + q z 2 ) ) \begin{aligned} \phi &= \text{atan2} (2(q_w q_x + q_y q_z), 1-2(q_x^2 + q_y^2)) \\ \theta &= \text{} \arcsin (2(q_w q_y - q_x q_z)) \\ \psi&= \text{atan2} (2(q_w q_z + q_x q_y), 1-2(q_y^2 + q_z^2)) \end{aligned} ?θψ?=atan2(2(qw?qx?+qy?qz?),1?2(qx2?+qy2?))=arcsin(2(qw?qy??qx?qz?))=atan2(2(qw?qz?+qx?qy?),1?2(qy2?+qz2?))?

其中 atan2 ( ) \text{atan2}() atan2() 不是 arctan ? ( ) \arctan() arctan()

舉例說明,因為若使用 arctan ? ( y / x ) \arctan(y/x) arctan(y/x),其返回值在 [ ? π / 2 , π / 2 ] [-\pi/2, \pi/2] [?π/2,π/2] 之間,因為它不能區分 x x x 的正負。而 atan2 ( y , x ) \text{atan2}(y, x) atan2(y,x),其返回值在 [ ? π , π ] [-\pi, \pi] [?π,π] 之間,可以區分 x x x 的正負,因此更為實用,尤其是在計算歐拉角時。更重要的是, atan2 ( y , x ) \text{atan2}(y, x) atan2(y,x) 能夠處理 x = 0 x=0 x=0 的情況,這在計算角度或歐拉角時非常有用。

注意,由于使用 arcsin ? ( ) \arcsin() arcsin(),當 θ \theta θ 接近 ± 90 ° \pm 90\degree ±90° 時,可能會出現數值不穩定。這是因為在這些極端情況下,航向和滾動變得不可區分,這就是所謂的萬向鎖問題。

% 給定四元數
quaternion = [0.9376  0.0244  0.2070  0.2782];  q_w = quaternion(1);
q_x = quaternion(2);
q_y = quaternion(3);
q_z = quaternion(4);% 轉換四元數到歐拉角
phi   = atan2(2*(q_w*q_x + q_y*q_z), 1 - 2*(q_x^2 + q_y^2));
theta = asin(2*(q_w*q_y - q_z*q_x));
psi   = atan2(2*(q_w*q_z + q_x*q_y), 1 - 2*(q_y^2 + q_z^2));% 如果需要角度形式而不是弧度,可以轉換為度
phi_deg   = rad2deg(phi);
theta_deg = rad2deg(theta);
psi_deg   = rad2deg(psi);
phi_deg =9.9953theta_deg =21.9990psi_deg =34.9983

4. 歐拉角轉四元數

給定三個歐拉角 ? , θ , ψ \phi, \theta, \psi ?,θ,ψ,相應的四元數為

q w = cos ? ( ? 2 ) cos ? ( θ 2 ) cos ? ( ψ 2 ) + sin ? ( ? 2 ) sin ? ( θ 2 ) sin ? ( ψ 2 ) q x = sin ? ( ? 2 ) cos ? ( θ 2 ) cos ? ( ψ 2 ) ? cos ? ( ? 2 ) sin ? ( θ 2 ) sin ? ( ψ 2 ) q y = cos ? ( ? 2 ) sin ? ( θ 2 ) cos ? ( ψ 2 ) + sin ? ( ? 2 ) cos ? ( θ 2 ) sin ? ( ψ 2 ) q z = cos ? ( ? 2 ) cos ? ( θ 2 ) sin ? ( ψ 2 ) ? sin ? ( ? 2 ) sin ? ( θ 2 ) cos ? ( ψ 2 ) \begin{aligned} q_w &= \cos(\frac{\phi}{2}) \cos(\frac{\theta}{2}) \cos(\frac{\psi}{2}) + \sin(\frac{\phi}{2}) \sin(\frac{\theta}{2}) \sin(\frac{\psi}{2}) \\ q_x &= \sin(\frac{\phi}{2}) \cos(\frac{\theta}{2}) \cos(\frac{\psi}{2}) - \cos(\frac{\phi}{2}) \sin(\frac{\theta}{2}) \sin(\frac{\psi}{2}) \\ q_y &= \cos(\frac{\phi}{2}) \sin(\frac{\theta}{2}) \cos(\frac{\psi}{2}) + \sin(\frac{\phi}{2}) \cos(\frac{\theta}{2}) \sin(\frac{\psi}{2}) \\ q_z &= \cos(\frac{\phi}{2}) \cos(\frac{\theta}{2}) \sin(\frac{\psi}{2}) - \sin(\frac{\phi}{2}) \sin(\frac{\theta}{2}) \cos(\frac{\psi}{2}) \end{aligned} qw?qx?qy?qz??=cos(2??)cos(2θ?)cos(2ψ?)+sin(2??)sin(2θ?)sin(2ψ?)=sin(2??)cos(2θ?)cos(2ψ?)?cos(2??)sin(2θ?)sin(2ψ?)=cos(2??)sin(2θ?)cos(2ψ?)+sin(2??)cos(2θ?)sin(2ψ?)=cos(2??)cos(2θ?)sin(2ψ?)?sin(2??)sin(2θ?)cos(2ψ?)?

得到的四元數是 ( q w , q x , q y , q z ) (q_w, q_x, q_y, q_z) (qw?,qx?,qy?,qz?)

phi   = deg2rad(10);  % 示例:10度,記得轉換為弧度
theta = deg2rad(22);  % 示例:22度
psi   = deg2rad(35);  % 示例:35度% 計算四元數
q_w = cos(phi/2) * cos(theta/2) * cos(psi/2) + sin(phi/2) * sin(theta/2) * sin(psi/2);
q_x = sin(phi/2) * cos(theta/2) * cos(psi/2) - cos(phi/2) * sin(theta/2) * sin(psi/2);
q_y = cos(phi/2) * sin(theta/2) * cos(psi/2) + sin(phi/2) * cos(theta/2) * sin(psi/2);
q_z = cos(phi/2) * cos(theta/2) * sin(psi/2) - sin(phi/2) * sin(theta/2) * cos(psi/2);quaternion = [q_w, q_x, q_y, q_z];
quaternion =0.9376    0.0244    0.2070    0.2782

Ref

  1. 旋轉矩陣 - Wikipedia
  2. 干貨整理:歐拉角、旋轉矩陣、四元數合輯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37844.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37844.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用Node.js吭哧吭哧擼一個運動主頁

簡單嘮嘮 某乎問題:人這一生,應該養成哪些好習慣? 問題鏈接:https://www.zhihu.com/question/460674063 如果我來回答肯定會有定期運動的字眼。 平日里也有煅練的習慣,時間久了后一直想把運動數據公開,…

火山引擎DataLeap的Data Catalog系統公有云實踐

更多技術交流、求職機會,歡迎關注字節跳動數據平臺微信公眾號,回復【1】進入官方交流群 Data Catalog是一種元數據管理的服務,會收集技術元數據,并在其基礎上提供更豐富的業務上下文與語義,通常支持元數據編目、查找、…

自然數的拆分問題

題目描述 任何一個大于 11 的自然數 n,總可以拆分成若干個小于 n 的自然數之和。現在給你一個自n,要求你求出 n 的拆分成一些數字的和。每個拆分后的序列中的數字從小到大排序。然后你需要輸出這些序列,其中字典序小的序列需要優先輸出。 輸…

搭建openGauss 5.0 一主一從復制集群

openGauss是一款支持SQL2003標準語法,支持主備部署的高可用關系型國產數據庫。 多種存儲模式支持復合業務場景,新引入提供原地更新存儲引擎。NUMA化數據結構支持高性能。Paxos一致性日志復制協議,主備模式,CRC校驗支持高可用。支…

設置返回列表元素上限

我正在「拾陸樓」和朋友們討論有趣的話題,你?起來吧?拾陸樓知識星球入口 在get_cell ,get_nets,get_xx等操作時返回的值上限是100,后面的就用...省略了,如果要修改這個上限,需要用下面命令: s…

設計模式之七大原則

👑單一職責原則 單一職責原則告訴我們一個類應該只有一個責任或者只負責一件事情。 想象一下,如果一個類承擔了太多的責任,就像一個人同時負責做飯、洗衣服和打掃衛生一樣,那么這個類會變得非常復雜,難以理解和維護。而…

一些Git Repo

文章目錄 Fake-TcpWow Fishing Script模擬券商柜臺 Fake-Tcp Fake-Tcp 自己寫的一個偽裝包測試。 嘗試把UDP的包偽裝成TCP包,再發送到Internet Wow Fishing Script 魔獸世界釣魚腳本 自己寫的魔獸世界釣魚腳本,10.0初期釣魚成功率90%以上。現在關服了…

基于Spring Boot的高校圖書館管理系統的設計與實現(Java+spring boot+MySQL)

獲取源碼或者論文請私信博主 演示視頻: 基于Spring Boot的高校圖書館管理系統的設計與實現(Javaspring bootMySQL) 使用技術: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java sp…

關于ChatGPT抽樣調查:78%的人用于搜索,30%的人擔心因它失業

人工智能早已不再被視為未來科技,而是越來越多地應用在時下人們的生活之中。根據DECO PROTESTE的調查,大約72%的葡萄牙人認為人工智能已經活躍于他們的日常。[1] 隨著ChatGPT對各個行業的影響,也引發了人們關于這種人工智能模型潛力的爭論&a…

c++模板的原理與使用

C中實現代碼復用有兩個方式:類的繼承(即實現了多態),以及模板的使用。這里介紹的模板的知識。 模板的目的: 同樣的代碼適用于不同類型下的使用,實現代碼的復用目的。 模板的原理: 編譯階段&am…

Cygwin 配置C/C++編譯環境以及如何編譯項目

文章目錄 一、安裝C、C編譯環境需要的包1. 選擇gcc-core、gcc-g2. 選擇gdb3. 選擇mingw64下的gcc-core、gcc-g4. 選擇make5. 選擇cmake6. 確認更改7. 查看包安裝狀態 二、C、C 項目編譯示例step1:解壓縮sed-4.9.tar.gzstep2:執行./configure生成Makefile…

shell之正則表達式及三劍客grep命令

一、正則表達式概述 什么是正則表達式? 正則表達式是一種描述字符串匹配規則的重要工具 1、正則表達式定義: 正則表達式,又稱正規表達式、常規表達式 使用字符串描述、匹配一系列符合某個規則的字符串 正則表達式 普通字符: 大小寫字母…

opencv視頻截取每一幀并保存為圖片python代碼CV2實現練習

當涉及到視頻處理時,Python中的OpenCV庫提供了強大的功能,可以方便地從視頻中截取每一幀并將其保存為圖片。這是一個很有趣的練習,可以讓你更深入地了解圖像處理和多媒體操作。 使用OpenCV庫,你可以輕松地讀取視頻文件&#xff0…

判斷推理 -- 圖形推理 -- 位置規律

一組圖:從前往后找規律。 二組圖:從第一組圖找規律,第二組圖應用規律。 九宮格: 90%橫著看找規律,第一行找規律,第二行驗證規律,第三行應用規律。 所有有元素組成都是線,三角形&…

面試熱題(驗證二叉搜索樹)

給你一個二叉樹的根節點 root ,判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下: 節點的左子樹只包含 小于 當前節點的數。節點的右子樹只包含 大于 當前節點的數。所有左子樹和右子樹自身必須也是二叉樹 二叉樹滿足以上3個條件&#xff0c…

spark的使用

spark的使用 spark是一款分布式的計算框架,用于調度成百上千的服務器集群。 安裝pyspark # os.environ[PYSPARK_PYTHON]解析器路徑 pyspark_python配置解析器路徑 import os os.environ[PYSPARK_PYTHON]"D:/dev/python/python3.11.4/python.exe"pip inst…

喜盈門、夢百合競相入局,智能床墊起風了

配圖來自Canva可畫 現代人的生活壓力普遍大,熬夜、失眠是常有的事,提高睡眠質量十分的重要。近些年來,市面上出現了許多輔助睡眠的產品,比如香薰、褪黑素、蒸汽眼罩、降噪耳塞、助眠枕、睡眠監測app等助眠神器。可以說為了睡個好…

【CLion + ROS2】在 clion 中編譯調試 ros2 package

目錄 0 背景1. 命令行編譯 ros2 package2. 使用 clion 打開 ros2 工程3. 使用 clion 編譯整個 ros2 工程3.1 使用 clion 的 external tool 配置 colcon build3.2 開始編譯 dev_ws 工程3.3 編譯結果: 4. 調試單獨的 ros2 package4.1 創建 ros2 package 的獨立的 colc…

【Git】版本控制器詳解之git的概念和基本使用

版本控制器git 初始Gitgit的安裝git的基本使用初始化本地倉庫配置本地倉庫三區協作添加---add修改文件--status|diff版本回退--reset撤銷修改刪除文件 初始Git 為了能夠更?便我們管理不同版本的?件,便有了版本控制器。所謂的版本控制器,就是?個可以記…