首页 > 其他分享 >OpenCASCADE 曲线求交

OpenCASCADE 曲线求交

时间:2023-11-29 14:32:54浏览次数:37  
标签:求交 曲线 算法 参数 OpenCASCADE 几何 包围


OpenCASCADE 曲线求交_数值算法

对于拓朴边提供了求交算法IntTools_EdgeEdge,这个类是使用类似于曲面求交的离散网格法,使用了离散包围盒法。

OpenCASCADE 曲线求交

1 Introduction

OpenCASCADE中提供了二维几何曲线的求交类Geom2dAPI_InterCurveCurve,对应到三维几何只提供了GeomAPI_IntCS, GeomAPI_IntSS,没有提供几何的GeomAPI_IntCC求交类。这些几何求交一般使用的是数值算法,即解方程。对于两条几何曲线P(u1), Q(u2),求交就是解P(u1) - Q(u2) = 0这个方程。为什么对于三维几何曲线没有提供数值算法?

对于拓朴边提供了求交算法IntTools_EdgeEdge,这个类是使用类似于曲面求交的离散网格法,使用了离散包围盒法。

OpenCASCADE 曲线求交_数值算法_02

基于包围合盒的算法是个递归算法,算法思路:

  1. 1) 检查两条边在参数范围内的包围盒,若空间干涉,则进行下一步;否则退出本次判断;
  2. 2) 找出两条边包围盒的公共部分对应的参数,若没找到,则退出本次判断;
  3. 3) 并将第一条边在参数范围内分割成2或3部分,执行第一步;
  4. 4) 退出条件:没有相交或找到相交的参数值;

第一次是分别分成2部分:

OpenCASCADE 曲线求交_数值算法_03

在递归函数FindSolutions()中,只去对第一条边进行参数分割成3部分:

OpenCASCADE 曲线求交_数值算法_04

2 辅助函数

OpenCASCADE 曲线求交_数值算法_05

第一个辅助函数是FindParameters(),用来更新第二条边在第一条边的的包围盒中的参数范围,使用这个参数范围更新包围盒。

第二个辅助函数是CheckCoincidence(),用来检测两段边是否重合。第一步是快速计算,对边采样10个点,若通过初步粗检测,后面再深入计算。这些算法都不太高效。

第三个辅助函数是IsIntersection()用来判断两边条在参数范围内是否相交。

3 测试

将两条边求交过程中的包围盒显示出来,方便查看理解算法。先测试两个圆之间的相交:

OpenCASCADE 曲线求交_数值算法_06

其中第一条边是绿色的圆,求交过程中的包围盒也用绿色表示;第二条边是红色的圆,求交过程中的包围盒也用红色表示。因为圆是闭合的,第一次都分割成2部分。将上面交点处理放大:

OpenCASCADE 曲线求交_样条曲线_07

后面都是将第一条边分割成3部分,然后分别用这3部分的包围盒去找与第二条边相交的参数范围,再更新第二条边的包围盒。继续放大上面交点处:

OpenCASCADE 曲线求交_数值算法_08

发现对于两个圆的求交,执行了100次,效率不高。又用两个B样条曲线求交来测试:

OpenCASCADE 曲线求交_样条曲线_09

发现对于B样条曲线求交速度较快。

4 Conclusion

曲线求交需要考虑重合部分,opencascae中没有使用数值算法来计算,而是采用基于包围盒的算法来处理。这种算法一般情况下可以快速找到求交解,有时递归较深,对于基本曲线可以像曲面求交一样分类处理以提高性能。opencascade中对于三维曲线求交算法性能还有优化空间。

 


为了方便大家在移动端也能看到我的博文和讨论交流,现已注册微信公众号,欢迎大家扫描下方二维码关注。

OpenCASCADE 曲线求交_辅助函数_10




标签:求交,曲线,算法,参数,OpenCASCADE,几何,包围
From: https://blog.51cto.com/eryar/8616302

相关文章

  • OpenCASCADE二维曲线求交
    OpenCASCADE二维曲线求交1IntroductionOpenCASCADE中对二维曲线求交和三维曲线求交是不同的,三维曲线求交统一使用离散法,二维曲线求交根据曲线类型的不同分种类型进行处理。二维曲线求交中还提供了计算自交的直接接口。在TKGeomAlgo中,主要内容就是拟合、求交算法,理解求交算法的......
  • 在终端绘制GPU显存使用曲线
    title:在终端绘制GPU显存使用曲线banner_img:https://cdn.studyinglover.com/pic/2023/08/588d9420c9302f5e0d6c2e89fbddf200.pngdate:2023-8-1311:44:00在终端绘制GPU显存使用曲线这个东西的灵感来自于写torch的时候想实时看到loss和gpu使用情况,突然想到可以在终端实时......
  • 数据分享|Eviews用ARIMA、指数曲线趋势模型对中国进出口总额时间序列预测分析
    全文链接:https://tecdat.cn/?p=34361原文出处:拓端数据部落公众号研究的背景及意义众自20世纪80年代至今,随着改革开放的深入以及中国最终加入WTO,我国的对外贸易实现了跨越式的发展,中国已经成为世界第一大出口国和第二大进口国,中国经济对世界经济做出了重大贡献。与此同时,中国经......
  • 样条曲线
    C0连续,C1连续,C2连续C1连续,一阶导连续。C2连续,二阶导连续。多项式插值n个点可用n-1阶多项式确定一条曲线。贝塞尔曲线https://zh.wikipedia.org/zh-cn/貝茲曲線控制点不一定要在曲线上,仅端点(起点和终点)在曲线上。......
  • OpenCASCADE曲线上点的反求
    OpenCASCADE曲线上点的反求[email protected]曲线可以用代数方程表示,如圆可以用X^2+Y^2=R^2表示,也可以用参数方程X(u)=RCos(u),Y(u)=RSin(u)表示。要判断点是不是在线上,用曲线代数方程可以很直接得出结果,但是使用参数方程就没有那么直接。这也是参数曲线上点的反求......
  • 股票交割单生成器,持仓图,收益曲线,bs点位生成工具,完全开源分享。
    这个工具其实是从某宝淘来的,我因为之前项目需要所以就把整个源码给拿下来了,易语言的,支持标题所讲的所有功能,包括交割单,持仓图,收益曲线,bs点位,各种功能都做的挺完善的,生成的截图都是高清图,因为这个源码对于我来说现在也没有太大的意义,然后就直接开源,让同行学习一下代码里面的结构......
  • 椭圆曲线
    椭圆曲线简单总结写这篇文章原因是老是忘记每个符号代表什么,所以搞一个简单的对照表元素符号参考起始点G,可以是任意一点私钥dA一个随机数dA公钥QAQA=dAxG随机数k消息摘要zP点k*G签名(R,S)R是P点的x坐标\(S=k^{-1}(z+dA......
  • g2o(2)求解曲线y=ax2+bx+c
     https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247486858&idx=1&sn=ce458d5eb6b1ad11b065d71899e31a04&chksm=97d7e81da0a0610b1e3e12415b6de1501329920c3074ab5b48e759edbb33d264a73f1a9f9faf&scene=21#wechat_redirect简要流程0-0获取数据x和y......
  • OpenCASCADE - 曲线自交
    OpenCASCADE-曲线自交1IntroductionOpenCASCADE为二维曲线提供了求交及自交的类Geom2dAPI_InterCurveCurve:当传入一个二维几何曲线时可以计算自交self-intersections。但是没有提供直接的三维几何曲线求交的类,也没有直接的计算自交的类。有人同学问OpenCASCADE有没有三维曲......
  • 如何走出自己的第二曲线
    本来工作日一般都是更新技术文章的,都写好草稿了,看到有同学私聊问我关于发展副业和第二曲线的问题,一时感慨颇多,索性就聊聊这个话题吧。这两年经济很差,反应到求职市场特别是互联网行业,真的是惨不忍睹。降本增效,裁员的大刀挥舞起来就没消停过,但凡新增一个HC,分分钟几十上百份简历涌......