![](https://img-blog.csdnimg.cn/direct/e8cceee9b222421c86dd8c404585b697.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
从零开始做一个世界级的三维几何算法库
文章平均质量分 63
几何算法算法库是CAD、数字孪生等领域基础中的基础。作者致力于开发一个国产的达到世界领先水平的三维几何库,至少在关键算法(求交、布尔运算等等)上达到,重点关注效率和稳定性。标题听上去很大,但我有信心做成它,本人曾经主导实现了某公司国内领先的图形平台的大部分核心算法,有实际积累,也知道如何做的更好。
wangzy1982
这个作者很懒,什么都没留下…
展开
-
图形算法库研发(九):模型定义与关系处理
普通Undo/Redo,Undo后修改,被Undo的日志可以直接清掉了,但数据同步后Undo,再修改就不能清掉,因为下次同步还需要将Undo也同步了,这时候就需要增加一个保存点的设计来管理哪些日志能清,哪些不能。第二,日志是会组合的,我们一般Undo/Redo的不是单条修改,而是一批命令,例如我们画一条线,要添加一条线,设置第一个顶点,设置第二个顶点,这三条修改应该作为一个组合命令Undo/Redo一次,而不是三次。鉴于这些问题的复杂度,我们需要很高的抽象能力,同时也会涉及很多的概念和细节。原创 2024-07-14 23:12:40 · 891 阅读 · 0 评论 -
图形算法库研发(八):高效精准的多项式值域估计算法
多项式是几何内核中比较常见的表达式(Bezier、Nurbs等),多项式值域精准高效的估计,严重影响区间类迭代算法的收敛速度。根据该多项式,通过计算极值点,很容易计算其值域区间为[21, 28],我们不推荐直接这样做的原因是因为计算极值点的效率有点低。在本算法中,我们做的工作是求出该式中的pi,并根据pi计算闭包作为多项式的值域估计。需要注意的是,u属于[0, 1],所以首先需要将多项式的变量x变换到[0, 1]。采用本文算法,u的采样点选为0,1/3,2/3,1。最终计算出的值域区间为[21, 31]。原创 2024-05-29 21:19:46 · 196 阅读 · 1 评论 -
图形算法库研发(七):三维曲线求交算法与结果演示
和OpenCaseCade对比,同样配置,OpenCaseCade用IntTools_EdgeEdge来实现三维线求交,相同数据和配置,1000次普通求交就要1.159秒,接近重合情况运行1000次需要50多秒,效率远超OpenCaseCade。演示代码如下所示,测试了Nurbs曲线的相交、重合、接近重合三种常见情况,每个运行1000次并输出计时和计算结果。算法是支持方程数多于变量数的,所以原理上不需要任何特殊处理。原理一致,唯一的区别就是方程组多了一个维度。从结果来看,效率和稳定性都还是不错了。原创 2024-05-13 22:06:01 · 246 阅读 · 0 评论 -
图形算法库研发(六):通用的二维曲线求交算法
特殊求交(例如直线与圆弧、圆弧与圆弧等)虽然是提速的好办法,但它们相对简单,只是工作量的问题,本文就不做针对性描述了。原创 2024-04-04 22:49:54 · 1911 阅读 · 1 评论 -
图形算法库研发(五):非线性方程组求解
基于上面的需求,WGP实现了一个方程组求解器,它的核心算法是在区间迭代法上做了改造。WGP的方程组求解器,由一个方程组定义(EquationSystem)和一个求解器组成(Solver),下面是一个直接调用最基础源码的例子。非线性方程组求解是图形算法库核心中的核心、曲线与曲线求交、曲线与曲面求交、曲面与曲面求交、空间距离检测、曲面求交内环检测等等等等。当然,区间迭代法有很多不足之处,我们只是借鉴了它的思想,设计出了我们独有的数值算法。关于区间迭代法思想的说明,可以看我下面的这篇文章。原创 2024-03-15 00:02:01 · 420 阅读 · 1 评论 -
图形算法库研发(零):源码库
2024-3-112024-3-12https://github.com/wangzy1982/WGP原创 2024-03-12 23:18:49 · 212 阅读 · 1 评论 -
图形算法库研发(四):OpenCASECADE的二维曲线求交算法验证
结果非常不理想,求出2个点和1段重合线,和我预期不太一致,用时方面这次1000次用了3.08635秒,算是非常慢了,可能OpenCASECADE有检测重合的算法,但即使有,每次求交都调重合监测,也不好。接近重合情况还是很常见的,也是最容易出错的,可见OpenCASECADE表现的并不好,计算结果错误,没有找到交点,耗时也不少,1000次耗时1.68328秒。1000次用时0.065093秒,还是不错的。首先看看我们的对标产品实现的怎么样。读者也可以当个学习的Demo来用。先从简单的入手,二维曲线求交。原创 2024-03-11 22:30:20 · 324 阅读 · 1 评论 -
图形算法库研发(三):快速在Visual Studio 2022环境下编译OpenCASECADE
但这个bat并不支持VS2022,所以既然我们要快速运行起来,又不想修改系统的环境变量,所以直接在项目里加吧。在这个项目中,我只是希望将OpenCASECADE作为对标工具,并不是用它来做具体项目,所以,我的目标是能在我的Visual Studio 2022下快速编译并跑起来一个Demo,并不需要完美的配置它,所以直接在VS里配置了绝对路径。2、尝试编译,会有部分project有找不到头文件或者lib文件,看似报了很多错,经过验证,实际需要调整的不多,主要是引用的第三方库找不到。添加完直接编译就可以了。原创 2024-03-11 21:54:55 · 465 阅读 · 2 评论 -
图形算法库研发(二):浮点数误差问题的处理逻辑
这个歧义的消除,就需要算法都统一到距离误差下,但统一到距离误差下往往会使算法变慢,所以,折中的方案是两个角度误差,一大一小,小于小的绝对重合,大于大的绝对不重合,两者之间的转为距离误差的算法。不夸张的说,因为这个问题的存在,几乎所有图形算法都不能完全按书上的实现,哪怕是最简单的判断点内外的射线法,在接近重合以及几何体不完美的情况下也会出错,都需要特殊处理(这个几何体不完美指的是几何体经过若干运算后,本身就带了误差,这个是必然会出现的)。因为情况太多了,不能一一列举,只能高度抽象,重要的是思想。原创 2024-03-10 17:12:29 · 774 阅读 · 1 评论 -
图形算法库研发(一):对标产品的选择
虽然据传说OpenCASECADE不如那几个商业引擎(本人并未考证,不对这句话真实性负责),但它应用的也足够广泛,最重要的是开源,这就使更深入细节的对比成为可能。在精力有限的情况下,OpenCASECADE明显是日常开发中最好的对标产品。目前,本人对OpenCASECADE的了解非常少,还需不断学习。后续除了会把自己开发过程中的核心技术和代码分享之外,也会把对OpenCASECADE的学习一起分享。既然要做一个世界级的图形算法库,首先还是选一个对标产品。综合来看OpenCASECADE是最合适的。原创 2024-03-10 16:47:45 · 127 阅读 · 0 评论