opencascade Bnd_Range源码学习区间表示

news2024/12/28 21:21:13

opencascade Bnd_Range

前言

在这里插入图片描述

这个类描述了由两个实数值限定的 1D 空间中的区间。
一个区间可以是无效的,这表示区间中不包含任何点。

方法

1

//! 默认构造函数。创建一个无效区间。
Bnd_Range() : myFirst(0.0), myLast(-1.0) {}

2

//! 构造函数。不会创建无效区间。
Bnd_Range(const Standard_Real theMin, const Standard_Real theMax) :
myFirst(theMin), myLast(theMax)
{
if(myLast < myFirst)
throw Standard_ConstructionError(“Last < First”);
}

3

//! 将 替换为 和 theOther 的交集。
Standard_EXPORT void Common(const Bnd_Range& theOther);

4

//! 将 *this 和 theOther 合并为一个区间。
//! 用结果替换 *this。
//! 如果操作无法完成(例如,输入参数为空或分离),则返回 false。
//! @sa 使用方法 ::Add() 以无条件合并两个区间。
Standard_EXPORT Standard_Boolean Union(const Bnd_Range& theOther);

5

//! 通过 theVal 值将 分割为多个子区间
//!(例如,区间 [3, 15] 将通过 theVal == 5 被分割为两个区间:[3, 5] 和 [5, 15])。
//! 新的区间将被推入 theList(在调用此方法之前,theList 必须正确初始化)。
//! 如果 thePeriod != 0.0,则至少有一个新的区间边界(如果 <this> 交叉 theVal+kthePeriod)
//! 将等于 theVal+thePeriod*k,其中 k 是一个整数(k = 0, +/-1, +/-2, …)。
//! (假设上面的 thePeriod 为 4 ==> 我们将获得四个区间:[3, 5]、[5, 9]、[9, 13] 和 [13, 15])。
Standard_EXPORT void Split(const Standard_Real theVal,
NCollection_List<Bnd_Range>& theList,
const Standard_Real thePeriod = 0.0) const;

6

//! 检查 是否与如下形式的值相交:
//! theVal+kthePeriod,其中 k 是一个整数(k = 0, +/-1, +/-2, …)。
//! 返回:
//! 0 - 如果 不与 theVal+k
thePeriod 相交。
//! 1 - 如果 与 theVal+kthePeriod 相交。
//! 2 - 如果 myFirst 或/和 myLast 等于 theVal+k
thePeriod。
//!
//! 注意!!!
//! 如果 (myFirst == myLast),则此函数仅返回 0 或 2。
Standard_EXPORT Standard_Integer
IsIntersected(const Standard_Real theVal,
const Standard_Real thePeriod = 0.0)

7

//! 扩展 以包含 theParameter。
void Add(const Standard_Real theParameter)

8

//! 扩展此区间以包含两个区间。
//! @sa 使用方法 ::Union() 检查两个区间是否重叠。
void Add (const Bnd_Range& theRange)

9

//! 获取 的最小边界。
//! 如果 是无效的,方法返回 false。
Standard_Boolean GetMin(Standard_Real& thePar)

10

//! 获取 的最大边界。
//! 如果 是无效的,方法返回 false。
Standard_Boolean GetMax(Standard_Real& thePar)

11

//! 获取 的最小和最大边界。
//! 如果 是无效的,方法返回 false。
Standard_Boolean GetBounds(Standard_Real& theFirstPar,
Standard_Real& theLastPar)

12

//! 获取满足方程的 theParameter 值
//! (theParameter-MIN)/(MAX-MIN) == theLambda。
//! * theLambda == 0 --> 返回最小边界;
//! * theLambda == 0.5 --> 返回中点;
//! * theLambda == 1 --> 返回最大边界;
//! * theLambda < 0 --> 返回小于最小值的值;
//! * theLambda > 1 --> 返回大于最大值的值。
//! 如果 是无效的,方法返回 false。
Standard_Boolean GetIntermediatePoint(const Standard_Real theLambda,
Standard_Real& theParameter)

13

//! 返回区间值 (MAX-MIN)。对于无效区间,返回负值。
Standard_Real Delta() const

14

//! 判断 是否已初始化。
Standard_Boolean IsVoid() const

15

//! 使用默认参数初始化 。将 设置为无效。
void SetVoid()

16

//! 扩展区间以包含给定值(向两边扩展)。
void Enlarge(const Standard_Real theDelta)

17

//! 返回偏移 theVal 后的 <*this> 的副本。
Bnd_Range Shifted(const Standard_Real theVal)

18

//! 偏移 <*this> by theVal。
void Shift(const Standard_Real theVal)

19

//! 通过给定的下限修剪区间的最小值。
//! 如果给定的下限大于区间最大值,则标记区间为无效。
void TrimFrom (const Standard_Real theValLower)

20

//! 通过给定的上限修剪区间的最大值。
//! 如果给定的上限小于区间最大值,则标记区间为无效。
void TrimTo (const Standard_Real theValUpper)

21

//! 如果值超出此区间,则返回 True。
Standard_Boolean IsOut (Standard_Real theValue)

22

//! 如果给定的区间超出此区间,则返回 True。
Standard_Boolean IsOut (const Bnd_Range& theRange)

23

//! 如果 theOther 等于 <*this> 则返回 TRUE。
Standard_Boolean operator==(const Bnd_Range& theOther)

24

//! 将内容输出到流中。
Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1)

使用例子

Bnd_Range 类表示一维空间中的一个区间,用于定义范围或区间,并提供了多种操作方法。下面是一个使用 Bnd_Range 类的简单例子,演示如何创建区间、合并区间、检查相交、分割区间等操作。

#include <iostream>
#include <Bnd_Range.hxx>
#include <NCollection_List.hxx>

int main()
{
    // 创建一个区间 [2.0, 5.0]
    Bnd_Range range1(2.0, 5.0);
    std::cout << "Range1: [" << range1.GetMin() << ", " << range1.GetMax() << "]" << std::endl;

    // 创建另一个区间 [3.0, 7.0]
    Bnd_Range range2(3.0, 7.0);
    std::cout << "Range2: [" << range2.GetMin() << ", " << range2.GetMax() << "]" << std::endl;

    // 合并两个区间
    if (range1.Union(range2)) {
        std::cout << "Union of Range1 and Range2: [" << range1.GetMin() << ", " << range1.GetMax() << "]" << std::endl;
    } else {
        std::cout << "Union operation failed." << std::endl;
    }

    // 检查区间是否相交
    Standard_Integer isIntersected = range1.IsIntersected(4.0);
    std::cout << "Range1 intersects with 4.0: " << (isIntersected ? "Yes" : "No") << std::endl;

    // 分割区间
    NCollection_List<Bnd_Range> splitRanges;
    range1.Split(4.0, splitRanges);
    std::cout << "Split Range1 at 4.0:" << std::endl;
    for (auto it = splitRanges.cbegin(); it != splitRanges.cend(); ++it) {
        std::cout << "  [" << it->GetMin() << ", " << it->GetMax() << "]" << std::endl;
    }

    // 扩展区间
    range1.Enlarge(1.0);
    std::cout << "Enlarged Range1: [" << range1.GetMin() << ", " << range1.GetMax() << "]" << std::endl;

    // 移动区间
    range1.Shift(2.0);
    std::cout << "Shifted Range1 by 2.0: [" << range1.GetMin() << ", " << range1.GetMax() << "]" << std::endl;

    return 0;
}

示例说明:

  1. 创建区间:我们创建了两个 Bnd_Range 对象 range1range2,分别表示区间 [2.0, 5.0][3.0, 7.0]

  2. 合并区间:使用 Union 方法合并 range1range2。如果两个区间相交,它们将合并为一个新的区间。

  3. 检查相交:使用 IsIntersected 方法检查 range1 是否与 4.0 相交。

  4. 分割区间:使用 Split 方法在 4.0 处将 range1 分割为多个子区间,并将结果存储在 splitRanges 列表中。

  5. 扩展区间:使用 Enlarge 方法将 range1 向两边扩展 1.0

  6. 移动区间:使用 Shift 方法将 range1 向右移动 2.0

输出示例:

Range1: [2.0, 5.0]
Range2: [3.0, 7.0]
Union of Range1 and Range2: [2.0, 7.0]
Range1 intersects with 4.0: Yes
Split Range1 at 4.0:
  [2.0, 4.0]
  [4.0, 7.0]
Enlarged Range1: [1.0, 8.0]
Shifted Range1 by 2.0: [3.0, 10.0]

这个例子展示了 Bnd_Range 的一些基本操作,涵盖了创建、合并、相交检查、分割、扩展和移动区间等常见使用场景。

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java后端面试题(redis相关1)(day7)

目录 为什么要用Redis&#xff1f;Redis到底是多线程还是单线程&#xff1f;Redis数据持久化机制RDB方式AOF方式 Redis是单线程&#xff0c;但为什么快&#xff1f;Redis 过期删除策略Redis 内存淘汰策略 为什么要用Redis&#xff1f; 基于内存操作&#xff0c;内存读写速度快k…

XSS漏洞分析

原理&#xff1a;利用网页开发时web应用程序对用户输入过滤不足导致将恶意代码注入到网页中&#xff0c;使用户浏览器加载并执行恶意代码&#xff0c;通常是JavaScript类型&#xff0c;也包括java、vbs、flash、html等。 解码的顺序是HTML&#xff0c;URL和JavaScript。 常用…

【运维】macos使用微软官方远程桌面工具mstsc控制windows10教程(含失败的解决方法)

【环境】macos使用微软官方远程桌面工具mstsc控制windows10教程&#xff08;含失败的解决方法&#xff09; 文章目录 1、如何获取本地账号密码并连接2、失败&#xff1a;检查被控权限是否有打开3、失败&#xff1a;登录过微软账号的情况 1、如何获取本地账号密码并连接 打开cm…

mysql 物理备份 MySQL 全量备份 增量备份 差异备份 日志备份万字长文 1.3万字

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循版权协议&#xff0c;转载请附上原文出处链接和本声明 注意&#xff0c;通常 完备增备&#xff0c;日志&#xff08;binlog)备&#xff0c;结合使用 差异则根据具体情况选用。 此备份过程 属于公司 常用的单个数据…

OpenVLA: An Open-Source Vision-Language-Action Model

发表时间&#xff1a;13 Jun 2024 作者单位&#xff1a;Stanford University Motivation: the potential to change how we teach robots new skills。然而&#xff0c;VLA 对机器人技术的广泛采用具有挑战性&#xff0c;因为 1&#xff09;现有的 VLA 在很大程度上是封闭的并…

Linux: 进程概念详解

目录 1. 冯诺依曼体系结构 2. 操作系统(Operator System) 1. 概念 2. 设计OS的目的 3. 任务 &#xff08;定位&#xff09; 4. 理解管理 3. 进程 1. 基本概念 2. 描述进程-PCB 3. 进程状态 4. 创建进程 fork 5. (Zombie)-僵尸进程 6. 孤儿进程 7. 进程优先…

[卷积神经网络]YOLOv10论文解读

原文地址&#xff1a; YOLOv10: Real-Time End-to-End Object Detectionhttps://arxiv.org/pdf/2405.14458 项目地址&#xff1a; yolov10https://github.com/THU-MIG/yolov10 一、概述 YOLOv10的改进点主要由两点&#xff1a;①提出一种基于无NMS的一致的双重训练策略&…

构建高效外贸电商系统的技术探索与源码开发

在当今全球化的经济浪潮中&#xff0c;外贸电商作为连接国内外市场的桥梁&#xff0c;其重要性日益凸显。一个高效、稳定、功能全面的外贸电商系统&#xff0c;不仅能够助力企业突破地域限制&#xff0c;拓宽销售渠道&#xff0c;还能提升客户体验&#xff0c;增强品牌竞争力。…

Web网站的授权oAuth2.0 单点登录

1.Web网站的授权(oAuth2.0) Client 第三方应用&#xff08;需要做鉴权的业务网站、业务系统&#xff09;UserAgent 用户代理&#xff08;浏览器&#xff09;Resource Owner 用户授权&#xff08;用户手动点击【同意】按钮&#xff0c;授权使用第三方登录渠道&#xff09;&#…

CPU飙升 怎么定位问题

传统的方法 【top】 查看所有进程占系统CPU的排序&#xff0c;定位是哪个进程搞的鬼。PID那一列就是进程号。 【top -Hp pid】 定位进程中使用 CPU 最高的线程tid 【printf ‘0x%x’ tid】 线程 tid 转化 16 进制,例如printf ‘0x%x’ 11882 得到16进制的 0x2e6a 【jstack…

Spring——IOC/DI思想

1、IOC&#xff08;Inversion of Control&#xff09;控制反转 何为控制反转&#xff1f; 在业务层中我们如果要调用数据层的方法那么必然牵扯到对象的创建&#xff0c;如果我想要改变上述数据层的方法中的内容&#xff0c;那么我就要改变业务层的代码&#xff0c;重新创建对…

R语言的矩阵运算

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容&#xff0c;每篇文章都在 5000 字以上&#xff0c;质量平均分高达 94 分&#xff0c;看全文请点击下面链接&#xff1a; 3章4节&#xff1a;R的逻辑运算和矩阵运算-CSDN博客文章浏览阅读165次。在 R 语言的丰…

PHP概述、环境搭建与基本语法讲解

目录 【学习目标、重难点知识】 什么是网站&#xff1f; 1. PHP 介绍 1.1. PHP 概述 1.1.1. PHP 是什么&#xff1f; 1.1.2. PHP 都能做什么&#xff1f; 1.2. PHP 环境搭建 1.2.1. PhpStudy 2. PHP 基本语法 2.1. PHP 语法入门 2.1.1. 第一个 PHP 程序 2.1.2. PHP …

Postman入门指南

前言 当前最为主流的开发模式&#xff1a;前后端分离 在这种模式下&#xff0c;前端技术人员基于"接口文档"&#xff0c;开发前端程序&#xff1b;后端技术人员也基于"接口文档"&#xff0c;开发后端程序。 由于前后端分离&#xff0c;对我们后端技术人…

PHP 无参数RCE总结

在这篇文章中&#xff0c;我总结了在参与CTF比赛过程中积累的关于PHP无参数远程代码执行&#xff08;RCE&#xff09;的经验。由于一直以来时间有限&#xff0c;今天终于有机会整理这些知识点。 可能用到的函数&#xff08;PHP的内置函数&#xff09; localeconv() 函数返回一…

String 事务

目录 一、什么是事务 二、Spring事务的实现方式 1、编程式事务 2、声明式事务 三、自动操作事务的注解的三个属性 1、rollbackFor 2、isolation 3、propagation 前言&#xff1a;本文所见围绕的主题是事务&#xff0c;所以笔者先讲解什么是事务&#xff0c;先让大家了解…

Selenium + Python 自动化测试15(模块化测试)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了使用SMTP 对象的sendmail 发送HTML报告的方法。 本篇文章我们接着讲测试代码的一些优化&#xff0c;提高我们测试代码的易读性&#xff0c;维护方便性。大家也…

ZooKeeper 集群的详细部署

ZooKeeper 集群部署 一、ZooKeeper 简介1.1 什么是 ZooKeeper1.2 ZooKeeper 特点 二 ZooKeeper 的架构和设计4.1 ZooKeeper 数据模型4.1.1 Znode 节点特性 三、ZooKeeper 的集群安装前准备工作3.1 需要的准备工作3.2 Linux 系统 3 个节点准备3.2.1 克隆3.2.2 配置另外两台服务器…

评论系统如何不崩溃?揭开海量评论背后的技术秘密

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米!今天我们来聊聊一个非常实际的场景:海量新闻评论的入库问题。假设你在某个新闻平台工作,某条热门新闻突然火爆,用户的评论量如潮水…

SpringBoot Web开发(请求,响应,分层解耦)

Author_T17&#x1f965; 目录 一.请求响应概述 1.Servlet 2.DispatcherServlet 3.请求响应工作概图 4.BS/CS架构 二.API测试工具 三.请求 1.简单参数 &#xff08;1&#xff09;原始方式&#xff08;不推荐&#xff09; ​编辑 &#xff08;2&#xff09;Spring Boo…