首页 > 其他分享 >OpenCASCADE曲面求交之网格离散法2

OpenCASCADE曲面求交之网格离散法2

时间:2023-05-21 20:34:26浏览次数:41  
标签:求交 曲面 网格 离散 交线 OpenCASCADE 计算

OpenCASCADE曲面求交之网格离散法2

[email protected]

1 Introduction

由朱心雄等著《自由曲线曲面造型技术》书中对曲面求交之网格离散法描述如下:该法的基本思想是先将曲面离散为由小平面片组成的网格,当网格足够密时,可以认为已经非常接近真实曲面,对分别表示不同曲面的两张网格,利用平面片求交法求得的交线,并以此交线近似代表曲面间的交线。这种方法原理简明,便于实现,适用范围广,任意参数曲面均可利用该法求交。但为获取精确地交线,则必须生成非常细密的网格,这将导致占用内存多,计算花费大。因此,实际工作中很少单一使用离散网格法,而常将其与其他方法结合使用。

OpenCASCADE中对于曲面求交也提供离散网格法,其中曲面的离散网格由类IntPatch_Polyhedron表示,两个网格面求交使用类IntPatch_InterferencePolyhedron。本文主要介绍曲面的网格求交类IntPatch_InterferencePolyhedron。

2 Polyhedron Interference

OpenCASCADE中计算两个三角网格交线的类是IntPatch_InterferencePolyhedron,这个类还可以用来计算一个网格的自交情况。目前是简单计算两个网格中所有三角形的相交情况,时间复杂度为O(nm)或O(n^2),对于网格三角形数量大的情况效率很低。为了稍微提高一些性能,引入Bnd_BoundSortBox来加速过滤掉包围盒不相交的三角形,减少两个三角形相交计算。

其中函数Intersect()就是用来计算两个三角形的相交情况。关于两个三角形的快速求交计算,很多网格处理库都使用了Tomas Moller’s 1997 triangle intersection routine,如

http://geometry-central.net/surface/algorithms/intersection/ 中也提供两个网格求交函数:

在使用较广泛的网格处理库CGAL中也有相关计算函数:

感兴趣的同学可以对比一下这三个库关于两个网格求交的性能,看谁的性能最好,使用了什么技术。这里只是将OpenCASCADE中计算的求交结果输出,首先是面的自相交情况:

其中红色部分为交线,可以看出在计算自相交时,会生成多余的交线。其中蓝色部分是有重叠三角形的情况。

当计算两个网格交线时,总体上是正确的,不过也会有多余的交线产生。

3 Conclusion

综上所述,两个网格相交计算最直接的算法就是两两三角形进行求交计算,但是对于大网格会有性能问题。OpenCASCADE中两个网格求交计算会得到多余的交线,目前网格离散求交只是用于B样条曲面的求交计算的前处理IntPatch_PrmPrmIntersection,从OpenCASCADE计算两个曲面交线结果来看,离散网格计算中多余的交线没有影响最终的计算结果。大家可以带着这个问题“离散网格计算得到多余的交线对最终结果有影响么?”来理解IntPatch_PrmPrmIntersection中曲面求交的实现原理。

标签:求交,曲面,网格,离散,交线,OpenCASCADE,计算
From: https://www.cnblogs.com/opencascade/p/occt_intpatch_polyhedron2.html

相关文章

  • VTK 显示3D网格线
    在VTK9.1.0在Windows10+VS2019+Qt5.15.2环境下编译安装的Qt例子中,想显示球体表面的网格线。通过vtkExtractEdges来实现显示全部网格线QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());vtkNew<vtkRenderer>renderer;vtkNew<vtkNam......
  • 山东算法赛网格事件智能分类topline
    赛题链接:http://data.sd.gov.cn/cmpt/cmptDetail.html?id=67baseline:https://aistudio.baidu.com/aistudio/projectdetail/3371314?contributionType=1分数:0.749+ 任务(1)赛题任务基于网格事件数据,对网格中的事件内容进行提取分析,对事件的类别进行划分,具体为根据提供的事件描述,......
  • 【Echarts】 grid网格
    Echarts网格问题:grid:{//直角坐标系内绘图网格left:'10',//grid组件离容器左侧的距离,//left的值可以是80这样具体像素值,//也可以是'80%'这样相对于容器高度的百分比top:'10',right:'30',bottom:'0',......
  • OpenCASCADE曲面求交之网格离散法1
    OpenCASCADE曲面求交之网格离散法[email protected] 1Introduction由朱心雄等著《自由曲线曲面造型技术》书中对曲面求交之网格离散法描述如下:该法的基本思想是先将曲面离散为由小平面片组成的网格,当网格足够密时,可以认为已经非常接近真实曲面,对分别表示不同曲面的两张网格,利用......
  • FreeCodeCamp-通过创建杂志学习 CSS 网格布局
    index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Magazine&......
  • LeetCode/二维网格图中探测环
    给你一个二维字符网格数组grid,大小为mxn,你需要检查grid中是否存在相同值形成的环。一个环是一条开始和结束于同一个格子的长度大于等于4的路径。对于一个给定的格子你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有相同的值1.深度......
  • opencascade下载安装
    安装要求(https://www.opencascade.com/components/cad-simplification-component/)下载地址:https://dev.opencascade.org/release截图如下(从https://dev.opencascade.org进,RESOURCES=>Download): 安装之后目录:《opencascade-7.7.0》文件夹:在环境变量中添加环境变量:DEvEnv......
  • 【Python&Hypermesh】ABAQUS导入网格,并在Part内保留SET
    在Hypermesh定义好set,划分好网格以后,可以导出为INP。然后在ABAQUS导入inp,就可以得到网格。但是这样倒进来的网格一般有两个问题:网格全在一个部件里,原来定义好的Set会出现在装配级别下,而不是Part级别,这在某些情况还是比较麻烦的Hypermesh中的component并不和ABAQUS的Part相对应......
  • 界面控件DevExpress WinForm的垂直网格,让数据展示更灵活(二)
    DevExpressWinForm VerticalGrid(垂直网格)组件设计用于提供UI灵活性,它允许显示数据集中的单个行,或在其90度反向网格容器中显示多个数据集行。此外,开发者还可以将其用作属性网格,就像在VisualStudioIDE中找到的那样。PS:DevExpressWinForm拥有180+组件和UI库,能为WindowsForms......
  • python三角网格划分示例
    python三角网格划分示例 importnumpyasnpimportturtle#输入三角形的边长length=float(input("Enterthelengthofthetriangle:"))#计算最短边、最长边和三角形个数short_side=lengthmax_side=length+lengthn=int(max_side/s......