自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 机械加工新手入门笔记:车铣区别与五轴机床

本文对比了车削与铣削的核心区别,并详细解析了五轴五联动加工技术。车削是工件旋转刀具固定,适合加工圆柱体;铣削是刀具旋转工件固定,擅长平面和复杂曲面。五轴机床在传统三轴基础上增加两个旋转轴,五联动则实现五轴同步运动,可加工复杂空间曲面。核心技术RTCP算法能实时补偿旋转误差,实现刀尖点精确跟随控制,是区分高端机床的关键。

2026-01-16 23:25:24 457

原创 【C++ 避坑指南】为什么 clear() 还不够?聊聊经典的 “Swap to Clear“ 内存释放技巧

是一行优雅且强力的代码。它利用了RAII(资源获取即初始化)和作用域生命周期的特性。它不仅清空了数据,还退还了物理内存。

2025-12-29 17:16:39 729

原创 【CGAL实战】深入理解二维受约束 Delaunay 网格生成

摘要:本文介绍了使用CGAL库生成受约束Delaunay三角网格(CDT)的方法。CDT在保留指定边界约束的同时,通过插入额外点优化网格质量。文章详细解析了核心代码实现,重点说明必须使用Delaunay_mesh_face_base_2类型支持细化算法,并深入讲解了Criteria参数对网格形状(0.125控制最小角)和密度(0.5控制最大边长)的关键作用。最后指出可通过函数对象实现非均匀网格生成,为计算几何和有限元分析提供高质量的离散化解决方案。

2025-12-23 23:47:55 972 1

原创 CGAL 实战笔记:深入理解 2D 符合三角剖分与网格生成 (针对 CAM 开发)

摘要:本文基于CGAL 5.10.2的Mesh_2软件包,探讨了计算机辅助制造(CAM)中几何网格质量的关键问题。针对普通约束三角剖分存在的边界不稳定问题,详细解析了Delaunay性质和更严格的Gabriel性质的区别,以及通过插入Steiner顶点实现网格优化的算法原理。文章结合C++代码演示了如何将普通三角剖分逐步优化为符合Delaunay和Gabriel标准的网格,并介绍了Lloyd算法作为进阶优化手段。这些技术在CAM软件开发中对于提高刀轨计算精度和数值稳定性具有重要意义。

2025-12-23 22:38:42 1008

原创 C++ 实战:构建通用的层次化数据模型 (Hierarchical Data Model)

利用多态和模板解决了类型系统的刚性问题。利用 RAII 和智能指针解决了手动内存管理的风险。利用回调函数实现了模块间的彻底解耦。它非常适合作为组态软件、节点编辑器、文件系统管理等复杂层次化应用的底层数据内核。

2025-12-19 16:53:37 486

原创 用 Swap 技巧彻底释放 Vector 内存

C++性能优化笔记:揭秘Swap技巧彻底释放Vector内存 摘要:在C++中,vector.clear()只会清空元素但保留内存容量,而swap技巧能彻底释放内存。通过创建临时空vector并交换,原vector容量归零,临时vector析构时释放内存。相比C++11的shrink_to_fit()请求式释放,swap技巧更可靠。DataNode.cpp中的这行代码体现了对内存管理的深入理解:vector<T>().swap(v)强制释放内存,适合大内存且不再使用的场景,而clear()适合快

2025-12-18 17:18:44 619

原创 从 BaseList 到 BaseMap:OCCT NCollection 容器内核的那条“暗线”

NCollection_BaseList是OCCT中链表类容器的基础类,为List、Set、Queue和Stack等集合提供公共父类。它专注于链表指针链接、长度维护和内存回收,不关心具体数据类型。通过函数指针注入实现节点删除策略,将类型相关操作交给上层处理。NCollection_TListIterator则为其提供模板化迭代器支持,继承基础迭代器并添加类型转换功能,使上层容器能进行类型安全的遍历操作。这种设计实现了链表操作与数据类型的解耦,提高了代码复用性。

2025-11-27 11:03:29 672

原创 NCollection_WinHeapAllocator:基于 Windows 专用堆的 OCCT 内存分配器

摘要:NCollection_WinHeapAllocator是一个基于Windows Heap API的专用内存分配器,继承自NCollection_BaseAllocator,适用于需要隔离模块内存的场景。它通过HeapCreate创建独立堆,支持LFH模式降低碎片,析构时通过HeapDestroy一键回收所有内存。在Windows平台使用HeapAlloc/HeapFree实现分配释放,非Windows平台退化为malloc/free。该分配器适合需要集中管理内存生命周期和碎片控制的场景,但需确保分配

2025-11-26 15:19:57 270

原创 NCollection_AlignedAllocator:面向 SSE/AVX 的对齐内存分配器

本文介绍了OCCT中的对齐内存分配器NCollection_AlignedAllocator,它专注于为数值/几何计算提供指定字节对齐的内存。该分配器继承自NCollection_BaseAllocator,通过构造函数指定对齐字节数(如16/32字节),并将实际分配委托给Standard::AllocateAligned实现跨平台对齐分配。其核心价值在于既满足SIMD指令的对齐要求,又能无缝集成到OCCT的分配器体系中,可作为基础模块与其他分配策略组合使用。适用于需要大规模向量化运算的场景,如处理std:

2025-11-26 11:56:12 436

原创 NCollection_AccAllocator 深度剖析:可回收的“累积分配器”,介于 malloc 和 IncAllocator 之间

摘要:NCollection_AccAllocator是OCCT中的一种内存分配器,它采用块式分配策略,支持按块回收内存。与IncAllocator不同,它通过引用计数实现安全回收:当块内所有分配都被释放时,该块会归还操作系统。其核心设计包括4字节对齐工具、块结构管理及双向链表维护,通过allocCount追踪活跃分配。相比IncAllocator,它以稍高的内存开销(约28字节/块)换取更灵活的内存管理能力。

2025-11-26 11:41:16 375

原创 NCollection_IncAllocator 深度剖析:OCCT 里的增量内存分配器(Arena Allocator)

OCCT内存管理中的增量分配器NCollection_IncAllocator采用区域式(arena)设计,通过大块内存预分配和内部增量分配提高效率。该分配器继承自NCollection_BaseAllocator,支持STL容器集成,其核心特性包括:1) 仅支持批量分配和整体释放(Free为空操作);2) 默认12KB初始块大小,动态调整块大小;3) 通过IBlock结构管理内存块,维护三个链表跟踪分配状态;4) 可选线程安全模式;5) 采用bump-pointer分配算法。这种设计特别适合需要批量创建临

2025-11-26 11:18:12 243

原创 OCCT 内存分配再进阶:NCollection_OccAllocator —— 真正“带状态”的 STL 分配器桥接层

摘要: NCollection_OccAllocator<T> 是一个有状态的 STL 分配器,通过内部保存的 Handle(NCollection_BaseAllocator) 实现自定义内存管理。与 NCollection_Allocator<T> 不同,它允许指定具体的分配器实例而非使用全局机制。关键特性包括:支持标准容器、通过 propagate_on_container_move_assignment 控制分配器传播行为、优先使用绑定的 BaseAllocator 执行内存

2025-11-25 17:28:29 513

原创 深入理解 OCCT 的 NCollection_Allocator:给 STL 容器插上 OCCT 的“内存外挂”

7.1 construct:placement new 构造对象 void construct(pointer thePnt, const_reference theItem) const { new (thePnt) ItemType(theItem); } 使用 placement new 在已分配的内存上构造对象; 通过拷贝构造(const_reference)初始化元素; 符合 C++03 allocator 标准接口。 7.2 destroy:显式调用析构函数 void destroy(point

2025-11-25 16:49:48 792

原创 从 BaseAllocator 到 HeapAllocator:OCCT 分配器实现再拆一层

本文分析了OCCT中的NCollection_HeapAllocator分配器实现。该分配器继承自NCollection_BaseAllocator,直接使用C Runtime的malloc/free进行内存管理。核心实现包括: Allocate()方法执行4字节对齐的内存分配,使用(theSize + 3) & ~0x3进行向上对齐,并在内存不足时抛出Standard_OutOfMemory异常 AllocateOptimal()方法直接调用Allocate(),未做特殊优化 Free()方法封装

2025-11-25 15:52:55 412

原创 从 NCollection_BaseAllocator 聊起:它到底是不是单例?怎么析构?

摘要 NCollection_BaseAllocator是OCCT中的基础内存分配器类,提供内存分配/释放接口。它具备部分单例特征: 通过CommonBaseAllocator()静态方法返回全局唯一实例 构造函数设为protected防止外部直接实例化 禁用拷贝构造函数 但严格来说它并非单例模式,因为: 允许派生类创建多个实例 设计意图是提供"默认单例实例"的同时支持自定义分配器 其单例实例通过静态局部变量实现,由Handle智能指针管理生命周期,在程序结束时自动析构。

2025-11-25 15:16:27 432

原创 数值分析:拉格朗日插值多项式

本文介绍了拉格朗日插值多项式的C++实现,重点包括:1)核心算法设计,使用vector和哈希集合优化数据存储;2)详细解释了拉格朗日基函数计算和插值过程;3)实现了误差分析功能,包括插值余项计算和导数边界估计。程序支持交互式验证、多项式信息显示和性能优化,适用于数值分析教学和工程应用。通过理论验证和代码优化,确保了算法的高效性和可靠性。

2025-08-28 16:17:51 665

原创 基于CGAL6.0中的内存池实现

CGAL内存池技术解析 CGAL库中的MemoryPool.h实现了高效的内存池管理技术,其核心思想是通过预分配大块内存来减少系统调用和内存碎片。该实现采用模板特化机制,为每种类型创建独立的内存池,并通过Thunk结构体巧妙结合对象存储和空闲链表管理。内存池支持单线程(static)和多线程(thread_local)两种模式,后者通过线程本地存储避免锁竞争。分配算法采用O(1)时间复杂度的链表操作,同时包含内存泄漏检测机制,在析构时检查未释放的内存块。相比传统内存分配,内存池可显著提升几何计算场景下的性能

2025-08-26 14:45:28 639

原创 一文彻底搞懂 CGAL 中的空间划分与 AABB 树

本文通过可视化SVG图解和代码示例,全面介绍了CGAL中AABB树(轴对齐包围盒树)的原理与应用。AABB树作为空间加速结构,可高效处理点/线与三角网格的距离查询、相交检测等几何计算。文章详细展示了AABB树的层次结构(根节点/子节点/叶节点),对比了基于完整网格拓扑和纯三角形数组两种构建方式,并提供了核心类型定义和基础查询示例。这种数据结构特别适合静态网格的高频查询场景,能大幅提升几何算法的执行效率。

2025-08-22 11:21:07 907

原创 OpenCASCADE + ImGui 集成黑屏问题解决方案

OpenCASCADE+ImGui黑屏问题解决方案摘要 OpenCASCADE和ImGui集成时常见的黑屏问题主要源于两者对OpenGL缓冲区交换的控制冲突。关键解决方法包括: 禁用OCCT内部交换:通过aGraphicDriver->SetBuffersNoSwap(Standard_True)禁用OpenCASCADE的内部缓冲区交换 确保上下文绑定:在ImGui初始化和每次渲染前调用glfwMakeContextCurrent() 正确渲染顺序:主循环中先刷新OCCT视图(不交换缓冲区),再渲染

2025-08-13 00:27:57 807

原创 CGAL Kernel 和 Traits 类深度解析:从官方教程到实践应用

本文深入解析CGAL中的Kernel和Traits类架构,从官方教程出发,通过分层架构图展示CGAL的应用层、算法层、几何内核层和数值计算层。重点剖析Kernel作为几何计算基石的三重核心职责:几何基元定义(Point/Line/Plane)、数值类型管理(FT/RT/ET)和基础运算提供(构造器/谓词/函数对象)。通过代码示例比较Simple_cartesian、Exact_predicates_inexact和Exact_predicates_exact三种Kernel在不同精度要求下的表现差异,为开发

2025-08-06 17:18:22 982

原创 back_inserter 详解

std::back_inserter是C++ STL中的迭代器适配器,用于自动向容器末尾添加元素。它通过调用容器的push_back()方法,避免了预先分配空间的问题,特别适合与STL算法配合使用。主要优势包括自动扩容、类型安全和代码简洁,适用于vector、deque等支持push_back的容器。通过实际示例展示了其在复制、变换元素和计算几何中的应用。相比手动管理容器大小,back_inserter能显著提升代码效率和安全性,是处理动态输出容器的理想工具。

2025-08-06 15:37:10 276

原创 CGAL中函数squared_distance使用细则

本文详细分析了CGAL库中的核心几何算法实现,重点剖析了squared_distance函数的计算原理与优化技术。主要内容包括:1) 点到线段距离的数学推导,通过向量投影和参数化分析实现高效计算;2) 三点共线判定的多种数学方法比较,包括叉积法、行列式法和斜率法;3) CGAL特有的精确算术实现机制和数值稳定性优化。这些算法在计算机图形学、机器人路径规划等领域具有广泛应用,文档通过伪代码和具体示例展示了算法实现细节与性能优化技巧。

2025-08-06 15:26:27 910

原创 NC路径生成中的固定轴刀具定位算法 - 详细技术文档

本文提出了一种基于曲面细分的固定轴刀具定位算法,用于数控加工路径生成。该算法通过自适应三角形细分技术逼近参数曲面,采用深度优先搜索策略结合剪枝优化,解决了传统APT算法的收敛问题和干涉检测不足等局限性。关键创新点包括:1)无需初始猜测值的全局搜索机制;2)基于Hausdorff距离的偏差测量方法;3)动态调整处理顺序的剪枝策略。算法已在商业CAD/CAM系统中实现,能有效处理复杂参数曲面,为数控加工提供可靠且高效的刀具定位解决方案。

2025-08-04 16:18:39 859

原创 鲁棒性 vs 稳定性:新手入门指南

本文简明扼要地解释了系统设计中鲁棒性(Robustness)与稳定性(Stability)的关键区别。稳定性关注系统在正常条件下的性能一致性(如同学生考试稳定发挥),而鲁棒性强调系统在异常情况下的容错能力(如司机应对突发状况)。文章通过对比表格、生活实例(汽车、手机)和编程示例(Python、C++)生动说明二者差异,并分别给出提升建议:稳定性需控制变量和使用确定性算法,鲁棒性需异常处理和边界测试。最后以口诀"正常时候不出错(稳定),出错时候不崩溃(鲁棒)"精炼总结,指出二者互补的重要性

2025-07-28 16:37:22 1529

原创 CRTP模式深度解析:向下转型的安全性与多重继承的挑战

CRTP模式是C++中一种利用模板参数实现编译时多态的设计模式。本文深入分析了CRTP向下转型的安全性机制及其在多重继承中的挑战。在单继承场景下,CRTP通过编译时类型约束和内存布局保证实现了安全的向下转型。然而,多重继承会破坏CRTP的基本假设,导致地址偏移问题和潜在风险。文章提出了避免多重继承、使用Mixin模式、添加编译时检查等解决方案,并以CGAL库的实际应用为例,阐述了CRTP在大型项目中的正确使用方式。最后强调遵循单继承优先、组合优于继承等最佳实践的重要性。

2025-07-28 16:31:13 472

原创 四种显式类型转换操作符

添加或移除 const/volatile 限定符。:编译时类型转换,最常用的转换操作符。:运行时类型检查的安全向下转换。:低级别的位模式重新解释。

2025-07-28 16:06:14 336

原创 深入理解CRTP模式与CGAL库指南

本文深入探讨了CRTP(奇特的重返模板模式)的设计原理及其在CGAL库中的应用。CRTP通过编译时多态实现高效的类型安全编程,避免了虚函数的运行时开销。文章对比了CRTP与传统虚函数的性能差异,展示了CRTP在编译时优化和内联方面的优势。CGAL库利用CRTP模式设计其几何内核和算法,实现了高性能的几何计算。通过实际代码示例,文章演示了如何利用CRTP构建可扩展的Drawable图形系统,为开发者提供了从理论到实践的完整指南。

2025-07-28 14:08:38 723

原创 三角剖分算法详解:从理论到实践

本文系统介绍了三角剖分算法,重点阐述了Delaunay三角剖分的理论原理、算法实现及工业应用。Delaunay三角剖分通过空圆特性确保最优三角形分布,采用边翻转算法实现局部优化,并提供分治与增量两种主要实现方法。文章还探讨了Voronoi图与Delaunay三角剖分的对偶关系,并以五轴叶片加工为例,展示了三角剖分在复杂曲面离散化、干涉检测和刀具路径规划中的具体应用,包括相关代码实现。该技术在CAD/CAM系统中具有重要的工程应用价值。

2025-07-23 01:24:35 1544

原创 dynamic_pointer_cast 深度解析

本文深入解析了C++中std::dynamic_pointer_cast智能指针类型转换技术,对比了传统指针转换的缺陷和智能指针的优势。文章详细介绍了其语法原理、工作机制(基于RTTI和别名构造函数),并展示了在多态对象处理、工厂模式和插件系统中的典型应用场景。最后简要提及了性能考量,特别是RTTI的开销问题,为开发者提供了安全高效的类型转换解决方案。

2025-07-22 11:07:35 557

原创 BREP边界表示法

BREP(Boundary Representation)是一种通过描述物体边界来表示三维实体的几何建模方法。任何三维实体都可以通过其边界面的集合来完全定义。

2025-07-21 15:24:05 656

原创 Redis和MySQL数据一致性方案

先更新数据库再删除缓存通常优于先删缓存再更新数据库缓存必须设置合理的过期时间,作为兜底机制关键业务考虑使用分布式锁避免并发问题监控系统是发现不一致的重要手段定期校对任务是保证长期一致性的关键。

2025-05-13 14:50:23 1159

原创 提升效率的 Vim 进阶秘笈

本文详细介绍了提升 Vim 使用效率的七大进阶技巧,帮助用户在百万行代码中游刃有余。首先,通过快速跳转技巧,如全局行号跳转、窗口内定位和模式化搜索,用户可以迅速定位到目标位置。其次,行内移动技巧如精确字符查找和单词级移动,能够精准控制光标。高效编辑部分强调了动作与文本对象的组合,如删除、修改和复制操作。此外,文章还介绍了 Buffer、Window 和 Tab 的管理方法,以及寄存器和宏的使用,帮助用户录制和重复操作。最后,通过配置 .vimrc 和使用插件如 vim-plug,用户可以打造专属的编辑环境,

2025-05-09 22:21:11 913

原创 mysql连接池

数据库连接池(Connection Pooling)是一种优化数据库连接管理的技术。程序在启动时建立一定数量的数据库连接,并将这些连接组成一个连接池。程序通过动态申请、使用和释放池中的连接来完成数据库操作

2025-01-17 20:33:02 870

原创 基于内存池的内存分配器

本文介绍了一段实现简单内存池的 C 语言代码,包括代码功能解析、实现原理和完整代码展示。该内存池通过预分配一大块内存并按固定大小划分为多个内存块,有效减少内存碎片和动态分配的开销。

2025-01-17 16:36:10 348

原创 微型布隆过滤器实现代码

实现了一个简化版的布隆过滤器(Bloom Filter),用于高效检测某个元素是否在集合中

2025-01-17 14:50:59 957

原创 hash的应用

2025-01-17 12:56:57 168

原创 redis 发布订阅

发布订阅的生产者传递过来一个消息,redis 会直接找到相应的消费者并传递过去;假如没有消费者,消息直接丢弃;假如开始有2个消费者,一个消费者突然挂掉了,另外一个消费者依然能收到消息,但是如果刚挂掉的消费者重新连上后,在断开连接期间的消息对于该消费者来说彻底丢失了;所以实际项目中如果支持 pubsub 的话,需要另开一条连接用于处理发布订阅;另外,redis 停机重启,pubsub 的消息是不会持久化的,所有的消息被直接丢弃;为了支持消息的多播机制,redis 引入了发布订阅模块;

2024-09-16 18:19:12 275

原创 Linux下,Redis安装部署和启动

Redis 是 Remote Dictionary Service 的简称;也是远程字典服务;Redis 是内存数据库,KV 数据库,数据结构数据库;Redis 命令查看:http://redis.cn/commands.html。

2024-09-16 16:33:13 409

原创 电脑死机重启后,乌班图ens33 接口无法分配 IPv4 或者 IPv6 地址

打开电脑任务管理器,打开这两个服务,就好啦。

2024-09-16 02:27:50 372

原创 哈夫曼树应用:构建、编码和解码c++实现

哈夫曼树应用:构建、编码和解码c++实现

2024-05-06 22:56:06 1112 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除