Opencascade 选择器算法
算法的阶段
该算法包括预处理和三个主要阶段。
使用深度优先搜索逐层遍历所有对象 。
该算法包括预处理和三个主要阶段。
使用深度优先搜索逐层遍历所有对象 。
预处理
计算平截头体及其主要特征的计算。
第一阶段 - 遍历第一级BVH树
在成功构建选择平截头体之后,算法开始遍历对象级BVH树。根据分离轴定理(separating axis theorem
SAT)的项,测试包含轴对齐边界框的节点与选择平截头体的重叠。当遍历向下到叶节点时,这意味着已找到具有可能重叠的感知实体(sensitive entity)的候选对象。如果没有检测到这样的对象,则算法停止并且假设不需要选择任何对象。否则,它将传递到下一个阶段以处理找到的可选对象的实体。
第二阶段 - 遍历第二级BVH树
在这个阶段,有必要确定一个对象的所有感知实体中是否存在候选者。
首先,在此阶段,算法检查是否存在对当前对象应用的任何变换。如果它有自己的位置,那么相应变换的平截头体将用于进一步的计算。在下一步骤,访问给定对象的第二级BVH树的节点以搜索重叠叶。如果没有找到这样的叶子,则算法返回到第二阶段。否则,它会通过执行以下检查来开始处理找到的实体:
- 激活检查 - 当前实体可能处于非活动状态,因为它属于未激活选择器;
- 公差检查 - 当前选择平截头体可能太大而无法进一步检查,因为它始终以所有激活实体中的最大公差构建。因此,在该步骤中,可以缩放平截头体。
在这些检查之后,算法进入最后阶段。
第三阶段 - 特定敏感实体的重叠或包含测试
如果实体是原子的,则执行简单的SAT测试。在复杂实体的情况下,遍历第三级BVH树。分析匹配的敏感实体的定量特征(如深度,到几何中心的距离)并应用剪裁平面(如果它们已经设置)。存储检测结果并且算法返回到第二阶段。
Opencascade 选择器算法的更多相关文章
- Delaunay Triangulation in OpenCascade
Delaunay Triangulation in OpenCascade eryar@163.com 摘要:本文简要介绍了Delaunay三角剖分的基础理论,并使用OpenCascade的三角剖分算 ...
- 设计简单算法体验Vivado HLS的使用
前言 本文主要讲解了使用Vivado HLS设计简单C语言的二选一选择器算法的硬件HLS开发的全流程,包括工程创建-算法验证和仿真-算法综合-RTL仿真-IP封装等步骤. 参考网站: http://b ...
- 使用这些 CSS 属性选择器来提高前端开发效率
属性选择器非常神奇.它们可以使你摆脱棘手的问题,帮助你避免添加类,并指出代码中的一些问题.但是不要担心,虽然属性选择器非常复杂和强大,但是它们很容易学习和使用.在本文中,我们将讨论它们是如何运行的,并 ...
- Topology and Geometry in OpenCascade-Adapters
Topology and Geometry in OpenCascade-Adapters eryar@163.com 摘要Abstract:本文简要介绍了适配器模式(adapter pattern) ...
- css选择器有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先
CSS选择器:基本可以分为通配选择器,标签选择器,类选择器,ID选择器,简单属性选择,具体属性选择,根据部分属性值选择,特定属性选择,从结构上来分还有后代选择器,子元素选择器,相邻兄弟选择器以及伪类. ...
- css选择器的优先级算法
1. 引言 浏览器CSS匹配顺序: 浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找. 比如#divBox p span.red{color:red;}, 浏览器的查找顺序如下: 先查找ht ...
- Convert BSpline Curve to Arc Spline in OpenCASCADE
Convert BSpline Curve to Arc Spline in OpenCASCADE eryar@163.com Abstract. The paper based on OpenCA ...
- OpenCASCADE BRep Projection
OpenCASCADE BRep Projection eryar@163.com 一网友发邮件问我下图所示的效果如何在OpenCASCADE中实现,我的想法是先构造出螺旋线,再将螺旋线投影到面上. ...
- OpenCASCADE Interpolations and Approximations
OpenCASCADE Interpolations and Approximations eryar@163.com Abstract. In modeling, it is often requi ...
随机推荐
- Bootstrap-CSS:排版
ylbtech-Bootstrap-CSS:排版 1.返回顶部 1. Bootstrap 排版 Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans ...
- 【旧文章搬运】ZwQuerySystemInformation枚举内核模块及简单应用
原文发表于百度空间,2008-10-24========================================================================== 简单说,即 ...
- 出现"Unable to instantiate Action,xxxxx, defined for 'login' in namespace '/' xxxxx 解决办法
转自:https://blog.csdn.net/heroful/article/details/17261169 问题原因: 在MyEclipse 利用SSH框架写程序,运行时出现 " U ...
- Event Handling Guide for iOS--(三)---Event Delivery: The Responder Chain
Event Delivery: The Responder Chain 事件传递:响应链 When you design your app, it’s likely that you want to ...
- Lua变量
Lua 变量 变量在使用前,必须在代码中进行声明,即创建该变量. 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值. Lua 变量有三种类型:全局变量.局部变量.表中的域. ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 18. 基于Claim和Policy的授权 下 - 自定义Policy
在加一个策略,要求cliam的值必须是123 第二个参数的类型 可变参数 ,可以是这三种类型 变成一个集合也可以 策略内置的几种方式 自定义 RequireAssetion的参数是个Func,Func ...
- Hmz 的女装(递推)
Hmz 的女装 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Sub ...
- HDU2438:Turn the corner(三分)
传送门 分析 根据这张图,我们只要使得h<=y即可,可以发现h是一个凸函数,故使用三分,具体见代码 代码 #include<cstdio> #include<cstring&g ...
- python之os、sys和random模块
import os # print(os.getcwd())#获取当前目录,绝对路径# print(os.chdir('../'))#更改当前目录,../的意思是退回上一级目录# print(os.g ...
- Easy Game LightOJ - 1031
Easy Game LightOJ - 1031 upd:似乎有复杂度更优越的做法,见http://www.cnblogs.com/hehe54321/p/8431020.html 题意:A和B玩一个 ...