自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 图形算法库研发(十):几何空间索引——R树

一种是查找某个实体,这种是直接拿实体的Box和节点数组中的Box做比较,如果在它内部则遍历该Box的子节点,直到叶节点,最后比较一下实体。选择插入位置的算法很多,这里推荐Box增加最小算法,即拿新插入的Box和节点中的每个Box做并,选择使Box增加最小的作为递归遍历的子节点。做磁盘索引时可以类比B树,节点数组的最大长度比较大,这样树的高度比较低,每次查询IO操作的次数会比较少(每次IO读取一整个节点),因为根节点每次都会访问到,所以要常驻内存。R树是一棵平衡树,它的平衡原理和B树一样,靠由下向上的分裂。

2024-07-14 23:15:46 658

原创 图形算法库研发(九):模型定义与关系处理

普通Undo/Redo,Undo后修改,被Undo的日志可以直接清掉了,但数据同步后Undo,再修改就不能清掉,因为下次同步还需要将Undo也同步了,这时候就需要增加一个保存点的设计来管理哪些日志能清,哪些不能。第二,日志是会组合的,我们一般Undo/Redo的不是单条修改,而是一批命令,例如我们画一条线,要添加一条线,设置第一个顶点,设置第二个顶点,这三条修改应该作为一个组合命令Undo/Redo一次,而不是三次。鉴于这些问题的复杂度,我们需要很高的抽象能力,同时也会涉及很多的概念和细节。

2024-07-14 23:12:40 888

原创 图形算法库研发(八):高效精准的多项式值域估计算法

多项式是几何内核中比较常见的表达式(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

原创 图形算法库研发(六):通用的二维曲线求交算法

特殊求交(例如直线与圆弧、圆弧与圆弧等)虽然是提速的好办法,但它们相对简单,只是工作量的问题,本文就不做针对性描述了。

2024-04-04 22:49:54 1910 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

原创 兼具代数法稳定性和数值法计算效率的Python方程组求解库——wsolver

采用数值方法,能稳定高效的计算出方程组定义域内的所有实根。除Python库外,也提供C语言库和Webassembly库。目前针对的是通用场景,也可针对特殊场景(例如几何求交)定制开发,计算效率更优。

2024-03-08 23:43:58 393

原创 数值法解非线性方程组全部实根最可行的算法——区间迭代法的几何意义

介绍这个算子的资料也很容易查找到,这里就不做详细展开了,这里只介绍关于矩阵Y的一个非常重要的直观理解, 这个直观理解几乎没有资料提到,但对我们构造一个快速收敛的迭代至关重要。不用担心,本文将跳过那些抽象的公式,从直观的角度讲解如何更深入的理解区间迭代法。图3表示的是将曲线旋转一个角度, 可以看出这时候两个曲线包围盒的相交区域明显变小,也就意味着迭代可以快速收敛到一个很小的区域。数值法解方程组是一个综合性的方法,每种独立的方法都有自身的局限性,而且还要考虑浮点数本身的舍入误差对计算结果稳定性的影响。

2024-03-08 21:12:58 698

原创 几何算法库中的浮点数误差问题

这个歧义的消除,就需要算法都统一到距离误差下,但统一到距离误差下往往会使算法变慢,所以,折中的方案是两个角度误差,一大一小,小于小的绝对重合,大于大的绝对不重合,两者之间的转为距离误差的算法。不夸张的说,因为这个问题的存在,几乎所有图形算法都不能完全按书上的实现,哪怕是最简单的判断点内外的射线法,在接近重合以及几何体不完美的情况下也会出错,都需要特殊处理(这个几何体不完美指的是几何体经过若干运算后,本身就带了误差,这个是必然会出现的)。所以,浮点数误差问题的根本解就是歧义检测与歧义处理。

2023-08-09 19:41:27 53 1

空空如也

空空如也

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

TA关注的人

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