Cesium中的线性代数和计算机图形学知识介绍

目录

  • 前言
  • 1.基础介绍
    • 1.1 线性代数
      • 1.1.1 向量 (Vectors)
      • 1.1.2 矩阵 (Matrices)
      • 1.1.3 四元数 (Quaternions)
    • 1.2 计算机图形学
      • 1.2.1 投影变换 (Projection Transformations)
      • 1.2.2 视图变换 (View Transformations)
      • 1.2.3 模型变换 (Model Transformations)
      • 1.2.4 光照与着色 (Lighting and Shading)
      • 1.2.5 纹理映射 (Texture Mapping)
      • 1.2.6 裁剪与视锥 (Clipping and Frustum Culling)
      • 1.2.7 地形和海量数据渲染
  • 2.详细介绍
    • 2.1 线性代数知识
      • 2.1.1 向量 (Vectors)
        • 1.基本运算
        • 2.点积 (Dot Product)
        • 3.叉积 (Cross Product)
        • 4.单位化 (Normalization)
        • 5.向量长度 (Length)
      • 2.1.2 矩阵 (Matrices)
        • 1.基本运算
        • 2.行列式 (Determinant) 和 逆矩阵 (Inverse Matrix)
        • 3. 4x4齐次坐标矩阵 (Homogeneous Transformation Matrix)
      • 2.1.3 四元数 (Quaternions)
        • 1.表示旋转
        • 2.四元数插值 (Slerp)
    • 2.2 计算机图形学知识
      • 2.2.1 投影变换 (Projection Transformations)
        • 1.透视投影 (Perspective Projection)
        • 2.正交投影 (Orthographic Projection)
      • 2.2.2 视图变换 (View Transformations)
        • 1.视图矩阵 (View Matrix)
      • 2.2.3 模型变换 (Model Transformations)
        • 1.模型矩阵 (Model Matrix)
      • 2.2.4 光照与着色 (Lighting and Shading)
        • 1.光照模型 (Lighting Models)
        • 2.着色算法 (Shading Algorithms)
        • 3.法线计算 (Normal Calculation)
      • 2.2.5 纹理映射 (Texture Mapping)
        • 1.UV坐标变换 (UV Mapping)
      • 2.2.6 裁剪与视锥 (Clipping and Frustum Culling)
        • 1.视锥裁剪 (Frustum Culling)
      • 2.2.7 地形和海量数据渲染
        • 1.地形细分 (Terrain Tessellation)
        • 2.多分辨率网格 (LOD, Level of Detail)
  • 3.总结

前言

  在 Cesium(包括 CesiumJS 和用于 Unreal Engine 中的 Cesium for Unreal)中,线性代数和计算机图形学知识被广泛应用于 3D 地理可视化、地形渲染、空间分析等领域,本文将对一些常见的知识进行基本介绍。

1.基础介绍

1.1 线性代数

1.1.1 向量 (Vectors)

基本运算:向量加法、减法、标量乘法等,用于表示位置、方向、速度等。

点积 (Dot Product):计算两个向量之间的夹角,应用于光照、视图方向等。

叉积 (Cross Product):计算两个向量的垂直向量,用于法线计算和旋转。

单位化 (Normalization):将向量长度标准化,用于方向矢量和法线计算。

向量长度 (Length):计算向量的长度,用于距离测量和方向计算。

1.1.2 矩阵 (Matrices)

基本运算:矩阵加法、乘法,用于合成变换(如组合平移、旋转、缩放)。

转置 (Transpose):用于求解矩阵的反向操作。

行列式 (Determinant) 和 逆矩阵 (Inverse Matrix):用于解决线性方程和逆变换。

4x4 齐次坐标矩阵 (Homogeneous Transformation Matrix):用于三维仿射变换,包括平移、旋转、缩放、透视投影等。

1.1.3 四元数 (Quaternions)

表示旋转:用于避免欧拉角旋转中的万向锁问题,高效地处理三维旋转。

四元数插值 (Slerp):用于平滑旋转动画和相机路径。

1.2 计算机图形学

1.2.1 投影变换 (Projection Transformations)

透视投影 (Perspective Projection):模拟人眼观察效果,近大远小。

正交投影 (Orthographic Projection):用于平行投影,保持物体尺寸一致。

投影矩阵 (Projection Matrix):将三维坐标变换到二维屏幕坐标。

1.2.2 视图变换 (View Transformations)

视图矩阵 (View Matrix):将世界坐标系转换到相机视角坐标系,管理相机的位置和方向。

相机变换 (Camera Transform):定义观察者在场景中的位置、方向和视角。

1.2.3 模型变换 (Model Transformations)

模型矩阵 (Model Matrix):对对象进行局部变换(如平移、旋转、缩放)。

层级变换 (Hierarchical Transformations):处理复杂对象时管理局部和全局变换。

1.2.4 光照与着色 (Lighting and Shading)

光照模型 (Lighting Models):如朗伯反射模型 (Lambertian Reflectance) 和菲涅耳反射 (Fresnel Reflection)。

着色算法 (Shading Algorithms):如平坦着色 (Flat Shading)、高光着色 (Specular Shading)、菲涅耳着色 (Fresnel Shading)。

法线计算 (Normal Calculation):用于光照计算和表面特性描绘。

1.2.5 纹理映射 (Texture Mapping)

UV坐标变换 (UV Mapping):将纹理映射到三维表面,用于丰富表面细节。

1.2.6 裁剪与视锥 (Clipping and Frustum Culling)

视锥裁剪 (Frustum Culling):剔除视锥外的物体,优化渲染性能。

屏幕空间裁剪 (Screen-Space Clipping):确保只渲染可见的部分。

1.2.7 地形和海量数据渲染

地形细分 (Terrain Tessellation):用于动态细分地形,实现高分辨率细节。

多分辨率网格 (LOD, Level of Detail):根据视距动态调整渲染细节,提升性能。

2.详细介绍

2.1 线性代数知识

2.1.1 向量 (Vectors)

1.基本运算
  • 向量加法/减法

    • 应用:用于移动物体、计算两个点之间的位移。
    • 示例:如果有两个向量 v 1 = [ 1 , 2 , 3 ] \mathbf{v1} = [1, 2, 3] v1=[1,2,3] v 2 = [ 4 , 5 , 6 ] \mathbf{v2} = [4, 5, 6] v2=[4,5,6],那么 v 1 + v 2 = [ 5 , 7 , 9 ] \mathbf{v1} + \mathbf{v2} = [5, 7, 9] v1+v2=[5,7,9]
  • 标量乘法

    • 应用:用于缩放向量。
    • 示例:向量 v = [ 1 , 2 , 3 ] \mathbf{v} = [1, 2, 3] v=[1,2,3] 乘以标量 2,得到 v ⋅ 2 = [ 2 , 4 , 6 ] \mathbf{v} \cdot 2 = [2, 4, 6] v2=[2,4,6]
2.点积 (Dot Product)
  • 应用:计算两个向量之间的夹角,用于光照计算和视图方向判断。
  • 公式 v 1 ⋅ v 2 = ∣ v 1 ∣ ∣ v 2 ∣ cos ⁡ θ \mathbf{v1} \cdot \mathbf{v2} = |\mathbf{v1}| |\mathbf{v2}| \cos \theta v1v2=v1∣∣v2cosθ
  • 示例:对于向量 v 1 = [ 1 , 2 , 3 ] \mathbf{v1} = [1, 2, 3] v1=[1,2,3] v 2 = [ 4 , − 5 , 6 ] \mathbf{v2} = [4, -5, 6] v2=[4,5,6],点积为 v 1 ⋅ v 2 = 1 ⋅ 4 + 2 ⋅ ( − 5 ) + 3 ⋅ 6 = 12 \mathbf{v1} \cdot \mathbf{v2} = 1 \cdot 4 + 2 \cdot (-5) + 3 \cdot 6 = 12 v1v2=14+2(5)+36=12
3.叉积 (Cross Product)
  • 应用:用于计算法线向量和旋转方向。
  • 公式 v 1 × v 2 = [ v 1 y ⋅ v 2 z − v 1 z ⋅ v 2 y v 1 z ⋅ v 2 x − v 1 x ⋅ v 2 z v 1 x ⋅ v 2 y − v 1 y ⋅ v 2 x ] \mathbf{v1} \times \mathbf{v2} = \begin{bmatrix} v1_y \cdot v2_z - v1_z \cdot v2_y \\ v1_z \cdot v2_x - v1_x \cdot v2_z \\ v1_x \cdot v2_y - v1_y \cdot v2_x \end{bmatrix} v1×v2= v1yv2zv1zv2yv1zv2xv1xv2zv1xv2yv1yv2x
  • 示例:对于向量 v 1 = [ 1 , 2 , 3 ] \mathbf{v1} = [1, 2, 3] v1=[1,2,3] v 2 = [ 4 , 5 , 6 ] \mathbf{v2} = [4, 5, 6] v2=[4,5,6],叉积为 v 1 × v 2 = [ − 3 , 6 , − 3 ] \mathbf{v1} \times \mathbf{v2} = [-3, 6, -3] v1×v2=[3,6,3]
4.单位化 (Normalization)
  • 应用:标准化向量用于方向计算和光照。
  • 公式 v ^ = v ∣ v ∣ \hat{\mathbf{v}} = \frac{\mathbf{v}}{|\mathbf{v}|} v^=vv
  • 示例:向量 v = [ 1 , 2 , 2 ] \mathbf{v} = [1, 2, 2] v=[1,2,2],单位化后为 v ^ = [ 1 , 2 , 2 ] 1 2 + 2 2 + 2 2 = [ 0.333 , 0.666 , 0.666 ] \hat{\mathbf{v}} = \frac{[1, 2, 2]}{\sqrt{1^2 + 2^2 + 2^2}} = [0.333, 0.666, 0.666] v^=12+22+22 [1,2,2]=[0.333,0.666,0.666]
5.向量长度 (Length)
  • 应用:计算向量的长度,用于距离测量。
  • 公式 ∣ v ∣ = v x 2 + v y 2 + v z 2 |\mathbf{v}| = \sqrt{v_x^2 + v_y^2 + v_z^2} v=vx2+vy2+vz2
  • 示例:向量 v = [ 1 , 2 , 2 ] \mathbf{v} = [1, 2, 2] v=[1,2,2] 的长度为 ∣ v ∣ = 1 2 + 2 2 + 2 2 = 3 |\mathbf{v}| = \sqrt{1^2 + 2^2 + 2^2} = 3 v=12+22+22 =3

2.1.2 矩阵 (Matrices)

1.基本运算
  • 矩阵乘法

    • 应用:用于组合多种变换,如平移、旋转、缩放。
    • 示例:矩阵 M 1 = [ 1 2 3 4 ] \mathbf{M1} = \begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix} M1=[1324] M 2 = [ 5 6 7 8 ] \mathbf{M2} = \begin{bmatrix}5 & 6 \\ 7 & 8\end{bmatrix} M2=[5768] 的乘积为 M 1 ⋅ M 2 = [ 19 22 43 50 ] \mathbf{M1} \cdot \mathbf{M2} = \begin{bmatrix}19 & 22 \\ 43 & 50\end{bmatrix} M1M2=[19432250]
  • 转置

    • 应用:用于求解变换的逆变换。
    • 示例:矩阵 M = [ 1 2 3 4 ] \mathbf{M} = \begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix} M=[1324] 的转置为 M T = [ 1 3 2 4 ] \mathbf{M}^T = \begin{bmatrix}1 & 3 \\ 2 & 4\end{bmatrix} MT=[1234]
2.行列式 (Determinant) 和 逆矩阵 (Inverse Matrix)
  • 应用:用于求解线性方程和坐标变换。
  • 示例:矩阵 M = [ 1 2 3 4 ] \mathbf{M} = \begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix} M=[1324] 的行列式为 det ( M ) = − 2 \text{det}(\mathbf{M}) = -2 det(M)=2,逆矩阵为 M − 1 = 1 − 2 [ 4 − 2 − 3 1 ] \mathbf{M}^{-1} = \frac{1}{-2} \begin{bmatrix}4 & -2 \\ -3 & 1\end{bmatrix} M1=21[4321]
3. 4x4齐次坐标矩阵 (Homogeneous Transformation Matrix)
  • 应用:用于三维仿射变换(平移、旋转、缩放)。
  • 示例:将点 p = [ 1 , 2 , 3 , 1 ] \mathbf{p} = [1, 2, 3, 1] p=[1,2,3,1] 平移 [ d x , d y , d z ] [dx, dy, dz] [dx,dy,dz],变换矩阵为:

T = [ 1 0 0 d x 0 1 0 d y 0 0 1 d z 0 0 0 1 ] \mathbf{T} = \begin{bmatrix} 1 & 0 & 0 & dx \\ 0 & 1 & 0 & dy \\ 0 & 0 & 1 & dz \\ 0 & 0 & 0 & 1 \end{bmatrix} T= 100001000010dxdydz1

2.1.3 四元数 (Quaternions)

1.表示旋转
  • 应用:用于避免欧拉角的万向锁问题,处理三维旋转。
  • 公式:四元数 q = w + x i + y j + z k q = w + xi + yj + zk q=w+xi+yj+zk
  • 示例:旋转向量 [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0] 90 度,四元数表示为 q = cos ⁡ ( 4 5 ∘ ) + i sin ⁡ ( 4 5 ∘ ) = 2 2 + i 2 2 q = \cos(45^\circ) + i\sin(45^\circ) = \frac{\sqrt{2}}{2} + i\frac{\sqrt{2}}{2} q=cos(45)+isin(45)=22 +i22
2.四元数插值 (Slerp)
  • 应用:用于平滑旋转动画和路径插值。
  • 示例:两个四元数 q 1 q1 q1 q 2 q2 q2 的插值为
    q ( t ) = sin ⁡ [ ( 1 − t ) θ ] sin ⁡ θ q 1 + sin ⁡ [ t θ ] sin ⁡ θ q 2 q(t) = \frac{\sin[(1-t)\theta]}{\sin \theta} q_1 + \frac{\sin[t\theta]}{\sin \theta} q_2 q(t)=sinθsin[(1t)θ]q1+sinθsin[]q2

2.2 计算机图形学知识

2.2.1 投影变换 (Projection Transformations)

1.透视投影 (Perspective Projection)
  • 应用:将三维场景转换为二维图像,模拟人眼观察效果。
  • 公式

P = [ 1 tan ⁡ ( f o v 2 ) 0 0 0 0 1 tan ⁡ ( f o v 2 ) 0 0 0 0 f a r + n e a r f a r − n e a r 2 ⋅ f a r ⋅ n e a r f a r − n e a r 0 0 − 1 0 ] \mathbf{P} = \begin{bmatrix} \frac{1}{\tan(\frac{fov}{2})} & 0 & 0 & 0 \\ 0 & \frac{1}{\tan(\frac{fov}{2})} & 0 & 0 \\ 0 & 0 & \frac{far+near}{far-near} & \frac{2 \cdot far \cdot near}{far-near} \\ 0 & 0 & -1 & 0 \end{bmatrix} P= tan(2fov)10000tan(2fov)10000farnearfar+near100farnear2farnear0

  • 示例:将视野为 60 度、近裁剪面为 1,远裁剪面为 1000 的相机进行透视投影,投影矩阵为:

P = [ 1.732 0 0 0 0 1.732 0 0 0 0 − 1.002 − 2.002 0 0 − 1 0 ] \mathbf{P} = \begin{bmatrix} 1.732 & 0 & 0 & 0 \\ 0 & 1.732 & 0 & 0 \\ 0 & 0 & -1.002 & -2.002 \\ 0 & 0 & -1 & 0 \end{bmatrix} P= 1.73200001.73200001.0021002.0020

2.正交投影 (Orthographic Projection)
  • 应用:将三维物体平行投影到二维平面,保持物体尺寸一致。
  • 公式

P = [ 2 r − l 0 0 l + r l − r 0 2 t − b 0 b + t b − t 0 0 2 n − f f + n n − f 0 0 0 1 ] \mathbf{P} = \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & \frac{l+r}{l-r} \\ 0 & \frac{2}{t-b} & 0 & \frac{b+t}{b-t} \\ 0 & 0 & \frac{2}{n-f} & \frac{f+n}{n-f} \\ 0 & 0 & 0 & 1 \end{bmatrix} P= rl20000tb20000nf20lrl+rbtb+tnff+n1

  • 示例:投影矩阵为:

P = [ 1 5 0 0 0 0 1 5 0 0 0 0 1 10 0 0 0 0 1 ] \mathbf{P} = \begin{bmatrix} \frac{1}{5} & 0 & 0 & 0 \\ 0 & \frac{1}{5} & 0 & 0 \\ 0 & 0 & \frac{1}{10} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} P= 51000051000010100001

将三维点投影到二维平面。

2.2.2 视图变换 (View Transformations)

1.视图矩阵 (View Matrix)
  • 应用:将世界坐标转换为相机视角坐标,管理相机的位置和方向。
  • 公式

V = [ R t 0 1 ] \mathbf{V} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ 0 & 1 \end{bmatrix} V=[R0t1]

  • 示例:假设相机在 [ 1 , 2 , 3 ] [1, 2, 3] [1,2,3] 处,朝向为 [ 0 , 0 , − 1 ] [0, 0, -1] [0,0,1],则视图矩阵为:

V = [ 1 0 0 − 1 0 1 0 − 2 0 0 1 − 3 0 0 0 1 ] \mathbf{V} = \begin{bmatrix} 1 & 0 & 0 & -1 \\ 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & -3 \\ 0 & 0 & 0 & 1 \end{bmatrix} V= 1000010000101231

2.2.3 模型变换 (Model Transformations)

1.模型矩阵 (Model Matrix)
  • 应用:对对象进行局部变换,如平移、旋转、缩放。
  • 公式

M = T ⋅ R ⋅ S \mathbf{M} = \mathbf{T} \cdot \mathbf{R} \cdot \mathbf{S} M=TRS

  • 示例:对对象进行平移 [ d x , d y , d z ] [dx, dy, dz] [dx,dy,dz],旋转 θ \theta θ 度,缩放 [ s x , s y , s z ] [sx, sy, sz] [sx,sy,sz],模型矩阵为:

M = [ s x 0 0 d x 0 s y 0 d y 0 0 s z d z 0 0 0 1 ] \mathbf{M} = \begin{bmatrix} sx & 0 & 0 & dx \\ 0 & sy & 0 & dy \\ 0 & 0 & sz & dz \\ 0 & 0 & 0 & 1 \end{bmatrix} M= sx0000sy0000sz0dxdydz1

2.2.4 光照与着色 (Lighting and Shading)

1.光照模型 (Lighting Models)
  • 应用:计算光线与物体表面的交互。
  • 朗伯反射模型 (Lambertian Reflectance)

I = L ⋅ max ⁡ ( N ⋅ L , 0 ) \mathbf{I} = \mathbf{L} \cdot \max(\mathbf{N} \cdot \mathbf{L}, 0) I=Lmax(NL,0)

  • 示例:光源 L = [ 1 , 1 , 1 ] \mathbf{L} = [1, 1, 1] L=[1,1,1],法线 N = [ 0 , 1 , 0 ] \mathbf{N} = [0, 1, 0] N=[0,1,0],则亮度为:

I = max ⁡ ( 0 , [ 0 , 1 , 0 ] ⋅ [ 1 , 1 , 1 ] ) = 1 I = \max(0, [0, 1, 0] \cdot [1, 1, 1]) = 1 I=max(0,[0,1,0][1,1,1])=1

2.着色算法 (Shading Algorithms)
  • 平坦着色 (Flat Shading):对每个多边形应用相同的颜色。
  • 高光着色 (Specular Shading):计算高光反射,模拟镜面效果。
3.法线计算 (Normal Calculation)
  • 应用:用于光照计算和表面特性描绘。
  • 公式

N = v 1 × v 2 ∣ v 1 × v 2 ∣ \mathbf{N} = \frac{\mathbf{v1} \times \mathbf{v2}}{|\mathbf{v1} \times \mathbf{v2}|} N=v1×v2v1×v2

  • 示例:两个向量 v 1 = [ 1 , 0 , 0 ] \mathbf{v1} = [1, 0, 0] v1=[1,0,0] v 2 = [ 0 , 1 , 0 ] \mathbf{v2} = [0, 1, 0] v2=[0,1,0],法线 N = [ 0 , 0 , 1 ] \mathbf{N} = [0, 0, 1] N=[0,0,1]

2.2.5 纹理映射 (Texture Mapping)

1.UV坐标变换 (UV Mapping)
  • 应用:将二维纹理映射到三维物体表面。
  • 示例:将纹理 ( u , v ) (u, v) (u,v) = (0.5, 0.5) 映射到三维点 p = [ x , y , z ] \mathbf{p} = [x, y, z] p=[x,y,z]

2.2.6 裁剪与视锥 (Clipping and Frustum Culling)

1.视锥裁剪 (Frustum Culling)
  • 应用:剔除视锥外的物体以提高渲染效率。
  • 示例:视锥为近远裁剪面 n e a r = 1 near = 1 near=1 f a r = 1000 far = 1000 far=1000,仅渲染视锥内的物体。

2.2.7 地形和海量数据渲染

1.地形细分 (Terrain Tessellation)
  • 应用:动态细分地形,实现高分辨率细节。
  • 示例:远处的地形使用粗糙的网格,近处使用细分网格。
2.多分辨率网格 (LOD, Level of Detail)
  • 应用:根据视距动态调整渲染细节,提升性能。
  • 示例:远处的物体使用低分辨率模型,近处使用高分辨率模型。

3.总结

  这些知识每个拿出来讲都有的讲,我们这里算是一个入门介绍,抛砖引玉,授人以鱼不如授人以渔,希望各位做三维的giser,不要仅局限于api的调用,也要进行深入的原理剖析,才能让这个行业发展壮大。

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

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

相关文章

Java 面试题:强引用、软引用、弱引用、幻象引用有什么区别?

在 Java 中,理解不同类型引用的区别对于掌握内存管理和垃圾回收机制是至关重要的。强引用、软引用、弱引用和幻象引用分别提供了不同的对象引用强度,使开发者能够精细控制对象的生命周期和内存使用情况。 强引用(Strong Reference&#xff09…

rapidjson使用中crash问题分析

问题 在使用rapidjson时,使用Document的Parse方法解析json字符串,程序crash。 分析 可以参考https://github.com/Tencent/rapidjson/issues/1269,由于rapidjson的内存分配器默认认为内存分配成功,没有对分配后做判空判断&#…

35.简易远程数据框架的实现

上一个内容:34.构建核心注入代码 34.构建核心注入代码它的调用LoadLibrary函数的代码写到游戏进程中之后无法调用,动态链接库的路径是一个内存地址,写到游戏进程中只把内存地址写过去了,内存地址里的内容没写过去,导致…

Netty ByteBuf 使用详解

文章目录 1.概述2. ByteBuf 分类3. 代码实例3.1 常用方法3.1.1 创建ByteBuf3.1.2 写入字节3.1.3 扩容3.1.2.1 扩容实例3.1.2.2 扩容计算新容量代码 3.1.4 读取字节3.1.5 标记回退3.1.6 slice3.1.7 duplicate3.1.8 CompositeByteBuf3.1.9 retain & release3.1.9.1 retain &a…

Jmeter5.X性能测试【完整版】

目录 一、Http基础协议和解析 1、浏览器的B/S架构和C/S架构 (1)CS架构 (2)BS架构 (3)URL理解 2、Http超文本传输协议 (1)含义 # 协议 # json协议 # xml协议 (…

分布式锁(Redission)

分布式锁: 使用场景: 通常对于一些使用率高的服务,我们会进行多次部署,可能会部署在不同的服务器上,但是他们获取和操作的数据仍然是同一份。为了保证服务的强一致性,我们需要对线程进行加锁,…

WRONGPASS invalid username-password pair or user is disabled

连接redis客户端的时候报错:WRONGPASS invalid username-password pair or user is disabled 当前redis版本为7.2.4 一、问题分析 默认情况下,Redis 7.0 使用默认用户名 default 和空密码进行身份验证。如果未设置 requirepass,则默认用户名…

C++实现自动生成c++类中的属性的get和set方法

目录 应用场景 运行准备 代码展示 结果显示 应用场景 当我们在编写类的属性时,需要对该属性进行封装,需要一系列的get和set的方法。例如下面是天气类的成员属性。可以看到属性很多,而写get和set都是一些固定的操作,因此可以直…

任务4.8.4 利用Spark SQL实现分组排行榜

文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述:使用Spark SQL实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell或创建Spark项目4. 读取数据5. 数据转换6. 创建临时视图…

哈夫曼树及其应用

目录 一、哈夫曼树 1.1基本概念 1.2构造方法 1.3构造算法的实现 二、哈夫曼树的应用 2.1哈夫曼编码 2.2文件的编码和解码 2.2.1编码 2.2.2解码 一、哈夫曼树 1.1基本概念 哈夫曼树又称为最优树,是一类带权路径长度最短的树。 最优二叉树:带权…

Android内核编译

前言 本文描述使用Ubuntu 编译Android内核刷入pixel4一些心得和流程。 PC信息: ./o- jackjackyyyyy- -yyyyyy OS: Ubuntu 22.04 jammy:////-yyyyyyo Kernel: x86_64 Linux 6.5.0-35-generic. .://-.sss/ Uptime: 1d 5h 4m.:o: //:--:/- …

Java 时间日期类API

Java 关于日期时间API 文章目录 Java 关于日期时间APIJDK8之前System类的方法java.util.DateJava.sql.Datejava.text.SimpleDateFormatjava.util.Calendar(日历) JDK8.0,新日期时间APIjava.timeInstant 瞬时与传统日期处理的转换 Java中关于日期时间API分为JDK8之前…

C++入门 vector部分模拟实现

目录 vector大致框架 vector常见接口模拟实现 begin迭代器 & end迭代器 capacity( ) & size( ) reserve operator[ ] push_back( ) & pop_back( ) sort vector大致框架 vector的内部的成员变量大概有三部分构成&#xff1a; namespace bit {template<c…

【Java算法】滑动窗口 上

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f456;一. 长度最小的子数组 题目链接&#xff1a;209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题&#xff0c;通过定义一…

Java赋值运算符

Java赋值运算符分为以下&#xff1a; 符号 作用 说明 赋值 int a 10,把10赋值给变量a 加后赋值 ab,将ab的值赋值给变量a - 减后赋值 a-b,将a-b的值赋值给变量a* 乘后赋值 a*b,将a*b的值赋值给变量a / 除后赋值 a/b,将a/b的值赋值给变量a % 取余赋值 a%b,将a%b的值赋值给变量…

力扣84.柱状图中最大的矩形

力扣84.柱状图中最大的矩形 初始化pre_max 为-1 存距离最近的小于h[i]的元素下标 初始化suf_max 为 n 存距离最近的小于h[i]的元素下标 class Solution {public:int largestRectangleArea(vector<int>& heights) {int n heights.size();//分别初始化-1 和 nvect…

C#循环语句总结

前言 正所谓磨刀不误砍柴工&#xff0c;C#上位机软件开发能力的提升离不开对C#语法的精通&#xff0c;本文接着讲解C#语法知识中的循环语句&#xff0c;在C#程序开发中我们经常会用到各种循环语句&#xff0c;常见的有for循环、while循环&#xff0c;本文就是对C#中用到的各种…

贪心算法—

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。这种算法并不总是能找到全局最优解&#xff0c;但在某些问题上能提供足够好的解决方案。贪心算法的关键特性包括&#…

drogon orm分页问题,req->getJsonObject()为空会导致Segmentation fault

2024年6月22日17:14:12 req->getJsonObject()获取json数据的时候&#xff0c;如果没有提前判断 if (req->getJsonObject() nullptr){throw std::invalid_argument("参数json不能为空");}auto jsonPtr req->getJsonObject();官方文档&#xff1a;https://…

JR-8000系列机架式多路4K超高清光端机

集中式 4K超高清光传输设备 1 产品特性 ⚫ 支持高达 8 通道 SMPTE 全格式 SDI 信号输入 ⚫ 发送端带有 LOOPOUT 环出端口&#xff0c;具备消抖动功能&#xff0c;可作为信号调理或级联信号源使用 ⚫ 接收端支持双输出端口 ⚫ 支持传输速率&#xff1a;143Mbps-11.88Gbps ⚫…