CGAL的3D网格参数化

news2024/11/16 17:29:59

1、介绍

        参数化曲面相当于找到一个从合适的域到曲面的单射映射。一个好的映射是在某种意义上最小化角度失真(保角参数化)或面积失真(等面积参数化)的映射。在这个包中,我们专注于参数化与圆盘或球体同胚的三角化曲面,以及平面域上的分段线性映射。

        尽管第一个参数化方法的主要动机是应用于纹理映射,但现在它经常用于映射更复杂的调制信号(如法线、透明度、反射或光调制图),拟合散乱数据,重新参数化样条曲面,修复CAD模型,近似曲面和重网格化。

        这个包实现了表面参数化方法,如尽可能刚性的参数化、Tutte重心映射、离散真实参数化、离散共形映射、最小二乘共形映射、浮动均值坐标或Orbifold Tutte Embeddings。这些方法主要通过它们最小化的变形(角度与面积)、平面域上的约束边界(凸多边形与自由边界)以及映射的双射性保证来区分。

        该软件包为 FaceGraph 概念的任何模型提供了一个接口,例如 Surface_mesh、Polyhedron_3、Seam_mesh 类或 OpenMesh 的网格类。

        备注:

        Seam_mesh类可用于虚拟切割网格,允许在符合磁盘或球体拓扑要求的子域中转换输入网格。

        由于参数化网格需要高效的稀疏矩阵表示和高效的迭代或直接线性求解器,我们为线性求解器提供了统一的接口.

        请注意,线性解算器通常使用双精度浮点数。因此,此包旨在与具有双精度的CGAL笛卡尔核一起使用。

        通过最小二乘保形贴图参数化进行纹理贴图。顶部:原始网格和纹理。底部:参数化网格(左侧:参数空间,右侧:纹理网格)。 

2、基础

2.1、默认曲面参数化

        从用户的角度来看,此包最简单的入口点是以下函数:

template <typename TriangleMesh, typename VertexUVMap>
Error_code parameterize(TriangleMesh & mesh,
                        boost::graph_traits<TriangleMesh>::halfedge_descriptor bhd,
                        VertexUVMap uvm);

         函数parameterize()将默认曲面参数化方法,即浮点均值坐标(见浮点均值坐标部分),应用于具有半边bhd给定边界的三角形网格类型的网格的连通分量。该边界采用弧长圆形边界参数化进行参数化。使用Eigen库的稀疏线性求解器。

        三角形网格类型的网格必须是 FaceGraph 概念的模型,并且必须另外进行三角剖分、2-流形、定向并且与圆盘同胚(可能带有孔)。最后一个要求并不难,我们稍后将展示如何参数化一个不是拓扑圆盘的网格(切割网格一节)。结果存储在网格顶点的属性映射中(其类型在这里是 VertexUVMap)。

        CGAL::Surface_mesh_parameterization 是CGAL(Computational Geometry Algorithms Library)库中的一个模块,用于对三角网格进行参数化。参数化是将一个形状映射到一个平面区域的过程,以便进一步处理或可视化。

        CGAL::Surface_mesh_parameterization 提供了一组算法和工具,用于将三角网格的表面映射到二维参数域。这可以用于各种应用,如纹理映射、网格修复、曲面重建等。

        该模块支持多种参数化方法,包括但不限于:

        保角参数化:通过保持角度信息来映射网格顶点到参数域中的点。

        等面积参数化:通过最小化面积变形来映射网格顶点到参数域中的点。

        刚性参数化:通过保持网格的几何形状和拓扑结构来映射网格顶点到参数域中的点。

        使用CGAL::Surface_mesh_parameterization,您可以对三角网格进行高效且高质量的参数化。您可以根据具体需求选择适当的参数化方法,并使用CGAL提供的工具和算法来处理和优化参数化结果。

         输入(左)、参数空间(中)和纹理网格(右)。

        CGAL::Surface_mesh_parameterization::parameterize 是CGAL库中用于对三角网格进行参数化的函数。它的参数可能因不同的实现和版本而有所不同,但通常包括以下参数:

        输入网格(Input Mesh)要参数化的三角网格。

        输出参数域(Output Parameter Domain):用于存储参数化结果的参数域。

        参数化方法(Parameterization Method):选择要使用的参数化方法,例如保角参数化、等面积参数化或刚性参数化等。

        约束边界(Boundary Constraints):如果存在需要保持不变的边界区域,可以提供约束边界的参数。

        此外,可能还有其他可选参数,如设置权重因子、指定目标参数域的形状等。具体的参数列表和用法可能会根据CGAL库的版本和实现有所不同,因此建议查阅相应的文档或参考示例代码以获取准确的信息。

2.2、选择参数化算法

        此包提供了第二个parameterize()入口点,用户可以在其中指定参数化方法:

template <typename TriangleMesh, typename Parameterizer_3, typename VertexUVMap>
Error_code parameterize(TriangleMesh& mesh,
                        Parameterizer_3 parameterizer,
                        boost::graph_traits<TriangleMesh>::halfedge_descriptor bhd,
                        VertexUVMap uvm);

        它计算从三维三角形曲面网格到简单二维域的一对一映射。映射在三角形网格上是分段线性的。结果是输入网格的每个顶点的一对(u,v)参数坐标。根据Parameterizer_3算法的选择,可以保证一对一映射,也可以不保证。 

3、曲面参数化的方法

        这个CGAL包实现了表面参数化方法,如尽可能刚性、图特重心、离散保角参数化、离散保形映射、最小二乘保形映射、浮动均值坐标或orbifold Tutte嵌入。这些方法作为Parameterizer_3概念的模型提供。

        根据所需的边界参数化类型,不同的参数化方法可分为三类:固定边界、自由边界和无边界。

        不同方法的插图都是用相同的输入模型,即手模型获得的,如下图所示。手是一个拓扑球体,使用Seam_mesh将其切割成拓扑圆盘。在下图中,接缝被标记为红色,用于Orbifold Tutte参数化的四个锥体(Orbifold Tutte Embeddings部分)被标记为绿点。

         本节中不同方法插图中使用的基础网格。接缝用红色描绘。用绿点标记的顶点是圆锥体。

3.1、固定边界曲面参数化

        固定边界曲面参数化的特征是在参数空间中具有受约束的边界:沿边界的每个顶点有两个(u,v)坐标。这种边界参数化方法有不同的选择,如“固定方法的边界参数化”一节所述。

3.1.1、所有重心映射

Surface_mesh_parameterization::Barycentric_mapping_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        Tutte Barycentric映射参数化(蓝线表示切割图)。最右边:参数空间。 

        Tutte引入了重心映射参数化方法。在参数空间中,每个顶点都放置在其邻居的重心上,以达到所谓的凸组合条件。该算法相当于为每组参数坐标求解一个稀疏线性系统,其中有一个#vertices x #vertices稀疏对称正定矩阵(如果线性系统消除了边界顶点)。对于连接顶点vi和vj的边,矩阵的系数(i,j)设置为1,对于对角元素,减去顶点vi的度数,对于任何其他矩阵条目,设置为0。虽然当边界是凸形时,保证双射映射,但这种方法既不能最小化角度,也不能最小化面积失真。 

3.1.2、离散Authalic参数化

Surface_mesh_parameterization::Discrete_authalic_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

         Desbrun等人引入了离散逼真参数化方法。它对应于保面积方法的弱形式,本质上局部最小化面积失真。只有满足凸组合条件并且边界是凸的,才保证了一对一的映射。这种方法求解了两个#vertices x #vertices稀疏线性系统。矩阵(两个系统都相同)是不对称的。

        离散Authalic参数化(蓝线表示切割图)。最右边:参数空间。 

3.1.3、离散共形映射

Surface_mesh_parameterization::Discrete_conformal_map_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        Eck等人将离散共形映射参数化引入到图形社区。它试图通过最小化Pinkall和Polthier导出的离散形式的狄利克雷能量来降低角度变形。只有满足以下两个条件时,才能保证一对一映射:重心映射条件(参数空间中的每个顶点都是其相邻顶点的凸组合),以及边界是凸的。这种方法解决了两个#vertices x #vertices稀疏线性系统。矩阵(两个系统都是一样的)是稀疏的、对称的正定矩阵(如果线性系统消除了边界顶点,并且网格中没有孔),因此可以使用专用线性求解器有效地求解。 

        离散保形映射。最右边:参数空间。 

3.1.4、浮动平均值坐标

Surface_mesh_parameterization::Mean_value_coordinates_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        Floater 引入了均值坐标参数化方法。参数空间中的每个顶点都被优化为其相邻顶点的凸组合。这种方法本质上是对离散共形映射的近似,当边界是凸的时,保证了一对一的映射。这种方法解决了两个#vertices x #vertices稀疏线性系统。矩阵(两个系统都是一样的)是不对称的。

        浮动平均值坐标。最右边:参数空间。 

3.1.5、迭代Authalic参数化

Surface_mesh_parameterization::Iterative_authalic_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        迭代真实参数化方法由 Jain 等人引入。这种参数化是一种固定的边界参数化,是真实参数化家族的一部分,这意味着它的目标是最大限度地减少输入曲面网格和参数化输出之间的面积失真。更准确地说,该参数化器使用的方法是在网格上迭代地重新分配 L2 拉伸——如 Sander 等人所定义的。

        迭代Authalic参数化(蓝线表示切割图)。最右边:参数空间。

         尽管这是一种固定边界参数化方法,但它不能保证一对一的映射。然而,在实践中,它将以比其他自参数化方法更小的失真产生有效的结果。 

3.1.6、固定方法的边界参数化

        边界的参数化方法被用作修改 Parameterizer_3 模型行为的特征类。它们也被作为 Parameterizer_3 概念的模型提供。固定边界曲面参数化的边界参数化是一系列定义一组约束的方法,即沿边界的每个顶点有两个 u,v 坐标。

        在为固定边界方法选择边界参数化时,用户可以选择不同的选项:

        用户可以在两种常用方法中选择边界参数化:均匀参数化或弧长参数化。

        用法:均匀边界参数化更稳定,但视觉效果较差。默认使用弧长边界参数化。

        由两个标准形状中的一个形状指定的凸形:圆形或方形。

        用法:默认情况下使用圆形边界参数化,因为它对应于最简单的凸形。方形边界参数化通常用于纹理映射。

        左:Julius Cesar面具参数化与Authalic/圆形边界。右图:朱利叶斯·塞萨尔面具上的浮动/方形边框。 

        均匀/弧长和圆形/方形的所有组合由以下类别提供:

Surface_mesh_parameterization::Circular_border_arc_length_parameterizer_3<TriangleMesh>
Surface_mesh_parameterization::Circular_border_uniform_parameterizer_3<TriangleMesh>
Surface_mesh_parameterization::Square_border_arc_length_parameterizer_3<TriangleMesh>
Surface_mesh_parameterization::Square_border_uniform_parameterizer_3<TriangleMesh>

        CGAL::Surface_mesh_parameterization::Square_border_uniform_parameterizer_3 是一个类模板,用于将三维曲面网格的边界参数化为均匀的矩形边界。

        这个类模板提供了将曲面网格的边界映射到矩形区域的方法,使得边界上的每个顶点都映射到矩形边界上的相应位置。这对于一些需要将三维曲面网格转换为二维矩形网格的应用场景非常有用,例如计算机图形学、计算机视觉和数值分析等领域。 

3.2、自由边界曲面参数化

        对于自由边界参数化方法,边界的顶点可以自由移动。

3.2.1、最小二乘保形映射

Surface_mesh_parameterization::LSCM_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        XXX等人引入了最小二乘保角映射(LSCM)参数化方法。它对应于具有自由边界的保角方法(至少两个顶点必须受到约束以获得唯一解),这允许进一步降低角度失真。这种方法不能保证一对一映射。它在最小二乘意义下求解一个(2×#三角形)×#顶点的稀疏线性系统,这意味着求解一个对称矩阵。 

        最小二乘保形映射。最右边:参数空间。 

3.2.2、尽可能刚性的参数化

Surface_mesh_parameterization::ARAP_parameterizer_3
<TriangleMesh, BorderParameterizer, SolverTraits>

        刘等人引入了一种尽可能刚性的参数化方法。这是一种基于迭代能量最小化过程的形状保持方法。每一步都交替使用局部优化技术来寻找最佳的局部映射,以及与线性系统分辨率相当的全局拼接技术,以确保参数化网格是三角形的。

        局部优化公式的推广引入了一个标量系数λ,允许用户平衡角度和形状失真:λ越接近0,越重视角度失真的最小化;相反,当λ增大时,参数化器越来越重视形状失真的最小化。

        “尽可能刚性”参数化(蓝线表示剪切图)。最右边:参数空间。 

3.2.3、自由方法的边界参数化

        边界的参数化方法被用作修改 Parameterizer_3 模型行为的特征类。它们也被作为 Parameterizer_3 概念的模型提供。与自由边界曲面参数化方法相关的边界参数化仅定义了两个约束:固定顶点。

Surface_mesh_parameterization::Two_vertices_parameterizer_3<TriangleMesh>

        用法:Surface_mesh_parameterization::Two_vertices_parameterizer_3<TriangleMesh>是默认的自由边界参数化,也是此软件包当前版本中唯一可用的参数化。

3.3、 无边界曲面参数化

        无边界参数化方法不需要与圆盘同胚的网格作为输入。

3.3.1、Orbifold Tutte Embeddings

Surface_mesh_parameterization::Orbifold_Tutte_parameterizer_3
<SeamMesh, SolverTraits>

         Orbifold-Tutte平面嵌入由Aigerman和Lipman引入,是Tutte嵌入到其他拓扑的推广,特别是球面,我们在这里考虑。Orbifold-Tutte嵌入将原始曲面(要求是拓扑球面)双射到称为欧几里得orbifold的规范、拓扑等价的二维平面。有17个欧几里得orbifold,其中只有4个球面orbifold目前在CGAL的GIMP中实现。

        orbifold-Tutte嵌入产生了一种无缝的、全局双射的参数化,与经典的Tutte嵌入类似,只需要求解一个稀疏的线性系统来进行计算。

        该算法要求用户选择输入网格的一组顶点并将其标记为锥体,这些锥体将是展开的奇点。在内部,该过程需要使用锥体之间的(虚拟)接缝,但这些接缝的选择不影响结果。 Seam_mesh结构(另见切割网格一节)用于此目的。

        (四个)基础圆锥体显示为绿色,虚拟切割显示为蓝色。最右边:参数空间。 

4、剪切网格

        该包中提出的曲面参数化方法仅处理与圆盘同胚(拓扑等效)的网格。然而,只要用户指定了定义拓扑盘边界的割图(一组边),就可以对具有任意拓扑和连接组件数量的网格进行参数化。这些边可以通过Seam_mesh结构与网格一起传递。

        剪切图

5、复杂度和保证

        固定边界:

        一对一映射;图特定理保证了一对一的映射,前提是权重都是正的,边界是凸的。图特重心映射和浮点均值坐标就是这种情况。离散共形映射(余切)、离散真圆和迭代真圆参数化并不总是这样。

        矩阵的非奇异性:如果矩阵是对角线占优的,则Geshorgin定理保证了求解器的收敛性。权重为正的情况就是这样(Tutte重心映射和浮动均值坐标)。

        自由边界:

        一对一映射;LSCM或ARAP参数化(可能出现全局重叠和三角形翻转)均不提供保证。

        矩阵的非奇异性:对于LSCM,系统的矩阵是具有最大秩的矩阵的Gram矩阵,因此是非奇异的(Gram定理)。

        无边界:

        一对一映射;Orbifold-Tutte嵌入是保证存在的,并且可以通过稀疏线性系统进行计算。

6、其他

        orbifold Tutte嵌入是一种参数化方法,它对Tutte的嵌入进行了泛化,使其适用于其他曲面拓扑,尤其是球面曲面的常见但未经处理的情况。

        在参数化过程中,orbifold Tutte嵌入强制执行某些边界条件,以实现欧几里得双峰结构。与经典的Tutte嵌入类似,它只需要求解稀疏线性系统即可进行计算。如果使用了余切权重,orbifold Tutte嵌入将全局Dirichlet能量最小化,并显示为近似保形和四点拟保形映射。

        orbifold Tutte嵌入还可以用于生成具有三个或四个地标和球型对称图案的双射表面间映射。

        图特重心的曲面参数化是一种参数化方法,它基于图特重心坐标的概念对曲面进行参数化。

        在参数化过程中,图特重心坐标被用于定义曲面上每个点的位置。通过计算每个点在邻域内的重心,可以获得一组参数,这些参数可以表示曲面上每个点的位置。

        图特重心坐标具有一些重要的性质,例如它们是保形的,即保持曲面的形状不变。此外,图特重心坐标还可以有效地处理复杂的曲面几何形状。

        在实现图特重心的曲面参数化时,通常需要使用数值方法来计算重心坐标。这可能涉及到求解线性方程组或使用其他数值方法来求解重心坐标。

        需要注意的是,图特重心的曲面参数化可能不适用于所有类型的曲面。对于一些复杂的曲面几何形状,可能需要采用其他参数化方法。

        Orbifold Tutte Embeddings是一种曲面参数化的方法,其基本思想是在参数化过程中强制执行某些边界条件,以实现欧几里得双峰结构。该方法是无缝的全局双射参数化,与经典的Tutte嵌入类似,只需要求解稀疏线性系统即可进行计算。如果使用了余切权重,Orbifold Tutte嵌入将全局Dirichlet能量最小化,并显示为近似保形和四点拟保形映射。它是第一个对保形映射产生双射近似的全线性方法。

        除了参数化,Orbifold Tutte Embeddings还可以用于生成具有三个或四个地标和球型对称图案的双射表面间映射。这种方法适用于各种曲面拓扑,尤其是球面曲面的常见但未经处理的情况。

        CGAL::Seam_mesh是一个用于处理缝纫网格(Seammesh)的类。缝纫网格是一种特殊的网格类型,用于表示和处理三维模型的缝合部分。它主要用于三维模型的缝合和重构,以及计算机图形学和计算机视觉中的其他相关任务。

        CGAL::Seam_mesh类提供了用于创建、操作和查询缝纫网格的功能。它支持对缝纫网格的顶点、边和面进行操作,包括添加、删除、修改等操作。此外,它还提供了一些函数和算法,用于执行缝纫网格的合并、修剪、重构等操作。

        使用CGAL::Seam_mesh类,您可以方便地处理三维模型的缝合部分,并对其进行各种操作和查询。这对于计算机图形学、计算机视觉和三维建模等领域的应用非常有用。

CGAL 5.6 - Planar Parameterization of Triangulated Surface Meshes: User Manual

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

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

相关文章

用CC三维建模建出的OSGB格式,用模方打不开,显示该路径包含OSGB瓦块数量0,是什么原因?

答&#xff1a;模方只识别tile命名的模型文件&#xff0c;此模型是不分块输出&#xff0c;要平面切块重新跑。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&…

Kubernetes 容器编排(2)

可视化部署 官方Dashboard 部署Dashboard # kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml # kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard # 注意将 type: ClusterIP 改为 type: NodePo…

每周一算法:树形动态规划

树形动态规划 树形动态规划一般用于处理求树上最优值的问题。大多数动态规划问题都是在一维二维这种规则的背景下的&#xff0c;可以解决的问题比较局限&#xff0c;而树作为一种特殊的图&#xff0c;可以描述比较复杂的关系&#xff0c;再加上树的递归定义&#xff0c;是一种…

Linux-CentOS7(无图形界面版)部署stable-diffusion-webui 全过程

Linux-CentOS7&#xff08;无图形界面版&#xff09;部署Stable Diffusion webui 全过程 前置要求 git的版本不能是CentOS默认的版本&#xff08;1.8&#xff09;&#xff0c;版本太老&#xff0c;在后面安装过程会失败。去github上下载最新的git源码包 安装成功显示版本号 …

用重建大师集群跑模型,在哪里可以设置联机?

答&#xff1a;工程路径、照片路径&#xff0c;引擎路径均设置为网络IP方式的路径&#xff0c;集群内的引擎都设置一样的路径就可以集群处理了。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c…

磁盘坏道扫描工具 Macrorit Disk Scanner v6.7.0 中文免费版 -供大家学习研究参考

非常方便实用的磁盘坏道修复软件。Wipe Bad Disk功能强大好用&#xff0c;通过特殊的算法来强制将硬盘的坏道删除清空格式化&#xff0c;从而拯救因产生坏道而不敢继续使用的硬盘!要注意的是经过这块软件清空的硬盘数据基本上是不能被恢复的&#xff0c;所以操作前请一定要备份…

【深度学习目标检测】七、基于深度学习的火灾烟雾识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…

基于Nexus搭建Maven私服基础入门

什么是Nexus&#xff1f;它有什么优势&#xff1f; 要了解为什么需要nexus的存在&#xff0c;我们不妨从以下几个问题来简单了解一下: 为什么需要搭建私服&#xff1f;如果没有私服会出现什么问题&#xff1f; 对于企业开发而言&#xff0c;如果没有私服&#xff0c;我们所有…

uniGUI for Delphi UniSweetAlert控件详解

UniSweetAlert是UniGUI后期版本新增的一个界面友好的消息提示和输入控件&#xff0c;是ShowMessageN的升级版&#xff0c;UniSweetAlert增加了更多的可控制属性。 属性介绍 1、AlertType&#xff1a;提示类型&#xff0c;分为atError、atSuccess、atInfo、atQuestion、atWarni…

JavaSE语法之七:封装

文章目录 一、封装的概念二、访问限定符三、封装扩展之包1. 包的概念2. 导入包中的类3. 自定义包4. 常见的包 四、实现封装五、static成员1. 再谈学生类成员变量2. static修饰成员变量3. static修饰成员方法4. static成员变量初始化 六、代码块1. 代码块概念及其分类2. 普通代码…

【VMware安装及虚拟机配置】

1. 下载VMware 进入 VMware Workstation 17 Pro下载链接 下拉到如下位置&#xff0c;点击DOWNLOAD 2. 安装VMware 参考&#xff1a;虚拟机VMware下载与安装教程 本次安装是vmware 17&#xff0c;安装步骤差不多&#xff0c;只参考第二部分即可。 3. 激活VMware 密钥&…

version `GLIBC_2.29‘ not found 的原因和怎么解决问题

程序上经常有在这台Linux上编译&#xff0c;然后放到另一个Linux上运行的情况。 如果Linux版本差别不大或都是ubuntu或centos系列还好。 如果不是一个系列很容易出现GLIBC 找不到的情况。 尤其是ubuntu上编译&#xff0c;然后放到centos系列。因为centos为了追求所谓的稳定&…

计算机组成原理-选择语句和循环语句的汇编表示

文章目录 选择语句jmpjxx示例&#xff1a;选择语句的机器级表示扩展&#xff1a;cmp指令的底层原理 循环语句使用条件转移指令实现循环用loop指令实现循环 选择语句 不一定知道指令的位置&#xff0c;所以jmp直接跳转到指令的位置很难办 jmp 标号相当于位置&#xff0c;名字…

生产派工自动化:MES系统的关键作用

随着制造业的数字化转型和智能化发展&#xff0c;生产派工自动化成为了提高生产效率、降低成本&#xff0c;并实现优质产品生产的关键要素之一。制造执行系统&#xff08;MES&#xff09;在派工自动化中发挥着重要作用&#xff0c;通过实时数据采集和智能调度&#xff0c;优化生…

Ubuntu虚拟机怎么设置静态IP

1 首先先ifconfig看一下使用的是哪个网络接口&#xff1a; 2 编辑 sudo vi /etc/netplan/00-installer-config.yamlnetwork:ethernets:ens33: # 根据您的网络接口进行修改&#xff0c;有的是eth0&#xff0c;有的是ens33&#xff0c;具体看第一步显示的是哪个网络接口addres…

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF(网络安全渗透)

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF&#xff08;网络安全渗透&#xff09; 全国职业院校技能大赛高职组信息安全管理与评估 &#xff08;赛项&#xff09; 评分标准 第三阶段 夺旗挑战CTF&#xff08;网络安全渗透&#xff09; *竞赛项目赛题* 本文…

【算法与数据结构】53、LeetCode最大子数组和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;程序一共两个变量&#xff0c;一个result一个count。result用来记录最终的结果&#xff0c;count记录当…

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法 文章目录 针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法Abstractscreen和tmux介绍tmux常用命令以及快捷键Byobu简单操作步骤集锦参考文献 Abstract PyTorch多卡并行运行程序is one of the mos…

Leetcode sql50基础题最后的4题啦

算是结束了这个阶段了&#xff0c;之后的怎么学习mysql的方向还没确定&#xff0c;但是不能断掉&#xff0c;而且路是边走边想出来的。我无语了写完了我点进去看详情都不让&#xff0c;还得重新开启计划&#xff0c;那我之前的题解不都没有了&#xff01;&#xff01; 1.第二高…

Winform高效获取控件(Control)方法 + 源码分析

背景&#xff1a;风好大&#xff0c;睡觉有点怕&#xff0c;起床敲代码了 之前学的都是都是通过遍历控件&#xff08;Controls&#xff09;&#xff0c;判断控件名是否相等来获取Control 其实直接通过:Controls["控件名"]&#xff0c;就可以获得需要的控件 为什么呢…