Open CASCADE学习|三重正交标架法则

三重正交标架(Trihedron)

定义:三重正交标架是在三维空间中定义的一个坐标系,由三个互相垂直的向量构成。这些向量分别是:

切线向量(Tangent Vector) - 表示曲线在某一特定点处的切线方向。

主法线向量(Normal Vector) - 在曲线的每一点上垂直于切线向量,并且根据曲面的曲面法线(如果曲线位于某个曲面上)来定向。

副主法线向量(Binormal Vector) - 垂直于切线向量和主法线向量,完成三重正交标架的构建。

应用:三重正交标架在计算机图形学中用于:

  • 定义沿曲线的局部坐标系,这对于曲面的参数化和建模非常重要。

  • 分析曲线的曲率和扭率,因为曲率向量和扭率向量可以通过三重正交标架的导数来计算。

  • 生成管道(Pipe)和扫掠(Sweeping)曲面,这些曲面沿着曲线拉伸一个截面。

三重正交标架法则(Trihedron Law)

定义:三重正交标架法则是一个在曲线的每一点上定义三重正交标架的规则。这个法则可以是显式的,也可以是隐式的,取决于它是基于特定的几何构造(如Frenet-Serret公式)还是基于更通用的几何约束。

Frenet-Serret公式:在曲线r(t)的参数化形renet-Serret公式提供了一种计算三重正交标架的方法,其中 𝑡是曲线的参数。这些公式基于曲线的导数:

应用:三重正交标架法则在计算机辅助设计(CAD)和计算机辅助制造(CAM)中用于:

  • 定义沿曲线的几何变化,这在创建复杂的3D几何形状时非常有用。

  • 控制沿曲线的截面变形,以生成复杂的曲面,如螺旋曲面或螺旋管道。

  • 实现高级曲面建模技术,如NURBS曲面的构建。

GeomFill_Frenet类继承自GeomFill_TrihedronLaw,用于在3D空间中定义沿曲线的Frenet三重正交标架法则。

GeomFill_Frenet类实现了Frenet三重正交标架法则,这在3D几何建模中用于定义沿曲线的局部坐标系,该坐标系由切线(Tangent)、主法线(Normal)和副主法线(BiNormal)构成。此类提供了计算三重正交标架及其导数的方法,并且能够处理曲线上的奇异点,这些奇异点是曲线的曲率或扭率不连续的点。

// 防止头文件被重复包含。
#ifndef _GeomFill_Frenet_HeaderFile
#define _GeomFill_Frenet_HeaderFile
​
#include <Standard.hxx>  // 标准库的头文件
#include <TColStd_HArray1OfReal.hxx>  // 用于存储实数数组的OCCT类
#include <GeomFill_TrihedronLaw.hxx>  // 三重正交标架法则的基类
#include <Standard_Real.hxx>  // 实数类型定义
#include <Standard_Integer.hxx>  // 整型定义
#include <GeomAbs_Shape.hxx>  // 几何形状定义
#include <TColStd_Array1OfReal.hxx>  // 用于存储实数数组的OCCT类
#include <gp_Vec.hxx>  // 几何向量类
​
// 声明GeomFill_Frenet类和它的句柄类型。
class GeomFill_Frenet;
DEFINE_STANDARD_HANDLE(GeomFill_Frenet, GeomFill_TrihedronLaw)
​
// 定义Frenet三重正交标架法则。
class GeomFill_Frenet : public GeomFill_TrihedronLaw
{
  public:  // 公共成员函数
​
    // 构造函数
    Standard_EXPORT GeomFill_Frenet();
​
    // 复制构造函数,创建当前对象的一个副本
    Standard_EXPORT virtual Handle(GeomFill_TrihedronLaw) Copy() const Standard_OVERRIDE;
​
    // 初始化Frenet法则
    Standard_EXPORT void Init();
​
    // 设置Frenet法则的曲线
    Standard_EXPORT virtual Standard_Boolean SetCurve(const Handle(Adaptor3d_Curve)& C) Standard_OVERRIDE;
​
    // 计算曲线上参数为Param处的三重正交标架
    Standard_EXPORT virtual Standard_Boolean D0(const Standard_Real Param, gp_Vec& Tangent, gp_Vec& Normal, gp_Vec& BiNormal) Standard_OVERRIDE;
​
    // 计算曲线上参数为Param处的三重正交标架及其一阶导数
    Standard_EXPORT virtual Standard_Boolean D1(const Standard_Real Param, gp_Vec& Tangent, gp_Vec& DTangent, gp_Vec& Normal, gp_Vec& DNormal, gp_Vec& BiNormal, gp_Vec& DBiNormal) Standard_OVERRIDE;
​
    // 计算曲线上参数为Param处的三重正交标架及其一阶和二阶导数
    Standard_EXPORT virtual Standard_Boolean D2(const Standard_Real Param, gp_Vec& Tangent, gp_Vec& DTangent, gp_Vec& D2Tangent, gp_Vec& Normal, gp_Vec& DNormal, gp_Vec& D2Normal, gp_Vec& BiNormal, gp_Vec& DBiNormal, gp_Vec& D2BiNormal) Standard_OVERRIDE;
​
    // 返回连续性S的区间数量
    Standard_EXPORT virtual Standard_Integer NbIntervals(const GeomAbs_Shape S) const Standard_OVERRIDE;
​
    // 存储连续性S的区间的边界参数
    Standard_EXPORT virtual void Intervals(TColStd_Array1OfReal& T, const GeomAbs_Shape S) const Standard_OVERRIDE;
​
    // 获取Tangent(t)和Normal(t)的平均值,这对于快速近似有理曲面非常有用
    Standard_EXPORT virtual void GetAverageLaw(gp_Vec& ATangent, gp_Vec& ANormal, gp_Vec& ABiNormal) Standard_OVERRIDE;
​
    // 检查法则是否恒定
    Standard_EXPORT virtual Standard_Boolean IsConstant() const Standard_OVERRIDE;
​
    // 返回True,表示法则仅由3D曲线确定
    Standard_EXPORT virtual Standard_Boolean IsOnlyBy3dCurve() const Standard_OVERRIDE;
​
    // 实现运行时类型识别(RTTI)
    DEFINE_STANDARD_RTTIEXT(GeomFill_Frenet, GeomFill_TrihedronLaw)
​
  protected:  // 保护成员函数
​
  private:  // 私有成员函数和变量
​
    // 检查U是否为奇异点,并返回奇异点的索引
    Standard_EXPORT Standard_Boolean IsSingular(const Standard_Real U, Standard_Integer& Index) const;
​
    // 处理奇异点
    Standard_EXPORT Standard_Boolean DoSingular(const Standard_Real U, const Standard_Integer Index, gp_Vec& Tangent, gp_Vec& BiNormal, Standard_Integer& n, Standard_Integer& k, Standard_Integer& TFlag, Standard_Integer& BNFlag, Standard_Real& Delta);
​
    // 计算奇异点处的三重正交标架
    Standard_EXPORT Standard_Boolean SingularD0(const Standard_Real Param, const Standard_Integer Index, gp_Vec& Tangent, gp_Vec& Normal, gp_Vec& BiNormal, Standard_Real& Delta);
​
    // 计算奇异点处的三重正交标架及其一阶导数
    Standard_EXPORT Standard_Boolean SingularD1(const Standard_Real Param, const Standard_Integer Index, gp_Vec& Tangent, gp_Vec& DTangent, gp_Vec& Normal, gp_Vec& DNormal, gp_Vec& BiNormal, gp_Vec& DBiNormal, Standard_Real& Delta);
​
    // 计算奇异点处的三重正交标架及其一阶和二阶导数
    Standard_EXPORT Standard_Boolean SingularD2(const Standard_Real Param, const Standard_Integer Index, gp_Vec& Tangent, gp_Vec& DTangent, gp_Vec& D2Tangent, gp_Vec& Normal, gp_Vec& DNormal, gp_Vec& D2Normal, gp_Vec& BiNormal, gp_Vec& DBiNormal, gp_Vec& D2BiNormal, Standard_Real& Delta);
​
    // 旋转三重正交标架以使给定的“Tangent”和“NewTangent”轴重合
    Standard_EXPORT Standard_Boolean RotateTrihedron(gp_Vec& Tangent, gp_Vec& Normal, gp_Vec& BiNormal, const gp_Vec& NewTangent) const;
​
    // 存储曲线上的点、奇异点数组和奇异点长度数组的句柄
    gp_Pnt P;
    Handle(TColStd_HArray1OfReal) mySngl;
    Handle(TColStd_HArray1OfReal) mySnglLen;
    Standard_Boolean isSngl;
​
};
​
#endif // _GeomFill_Frenet_HeaderFile

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | 软件测试工程师,有软考中、高级认证优先

01 上海碧蔓智能科技有限公司 招聘岗位&#xff1a;软件测试工程师 职责描述&#xff1a; 1、负责软件产品的测试工作&#xff0c;对测试进度和测试质量负责&#xff1b; 2、参与业务需求、设计方案的讨论&#xff0c;负责编写测试方案、测试计划、测试用例&#xff0c;搭建测…

冲突:故事型游戏的燃料

在故事型游戏中&#xff0c;冲突是推动情节发展的关键因素。没有冲突&#xff0c;故事就会变得平淡无奇&#xff0c;缺乏吸引力。在这篇博客中&#xff0c;我将探讨冲突在故事型游戏中的重要性&#xff0c;以及如何利用冲突为游戏增色添彩。 首先&#xff0c;让我们来了解一下冲…

Spring Boot 整合 Druid

目录 &#x1f34e;前言 &#x1f34a;数据库连接池 &#x1f34a;为什么需要使用数据库连接池 &#x1f34a;常见的连接池分类 &#x1f34e;什么是Druid &#x1f34a;Druid的功能 &#x1f34a;基本配置参数如下&#xff1a; &#x1f34e;整合Druid &#x1f34a;导…

深入解析Java中Set接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

ai直播-智能化视频直播-全程自动学,高效互动问答!

ai直播-智能化视频直播-全程自动学&#xff0c;高效互动问答&#xff01; 普通人想要致富&#xff0c;光靠勤劳是不可能的&#xff0c;唯有抓住时代风口&#xff0c;才能铸造成功之路。 大家都知道&#xff0c;现在最赚钱的行业&#xff0c;直播和卖货&#xff0c;肯定是名列…

今日arXiv最热NLP大模型论文:NAACL24实锤语言学对大模型“负优化”,抽象语义表示+思维链有损表现

大语言模型正以势不可挡的姿态席卷自然语言处理领域。在这个语言模型大显神威的时代&#xff0c;很多任务都转变为了端到端的文本生成任务。那么&#xff0c;在此之前我们苦心孤诣研究了几十年的语义表示&#xff0c;例如 AMR(抽象意义表示)&#xff0c;在这个时代里还能派上用…

手撕spring框架(5)

手撕spring框架(5) 相关系列 手撕spring框架&#xff08;1&#xff09; 手撕spring框架&#xff08;2&#xff09; 手撕spring框架&#xff08;3&#xff09; 手撕spring框架&#xff08;4&#xff09; 这是本专题最后一节了&#xff0c;主要是讲述自定义一个注解&#xff0c;实…

代码随想录算法训练营第六十二天|503.下一个更大元素II、42.接雨水

代码随想录算法训练营第六十二天|503.下一个更大元素II、42.接雨水 503.下一个更大元素II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元…

【kernel exploit】CVE-2024-1086 nftables UAF漏洞-Dirty Pagedirectory利用方法

影响版本&#xff1a;Linux v3.15 - v6.7.2。v5.15.149 / v6.1.76 / v6.6.15 / v6.7.3 已修复&#xff0c;包括CentOS、Debian、Ubuntu和KernelCTF等。 注意&#xff0c;本exp适用于v5.14.21~v6.3.13&#xff0c;成功率99.4%&#xff1b;对于v6.4及以上版本的内核&#xff0c;…

buuctf-misc题目练习三

荷兰宽带数据泄露 BIN 文件&#xff0c;也称为二进制文件&#xff0c;是一种压缩文件格式&#xff0c;可以 包含图像和视频等信息 , 并被许多应用程序用于各种目的。 RouterPassView是一个找回路由器密码的工具。 大多数现代路由器允许备份到一个文件路由器的配置&#xff0c…

双目相机标定流程(MATLAB)

一&#xff1a;经典标定方法 1.1OPENCV 1.2ROS ROS进行双目视觉标定可以得到左右两个相机的相机矩阵和畸变系数&#xff0c;如果是单目标定&#xff0c;用ROS会非常方便。 3.MATLAB标定&#xff08;双目标定&#xff09; MATLAB用来双目标定会非常方便&#xff0c;主要是为…

【算法入门赛】A.坐标变换(推荐学习)C++题解与代码

比赛链接&#xff1a;https://www.starrycoding.com/contest/8 题目描述 武汉市可以看做一个二维地图。 牢 e e e掌握了一项特异功能&#xff0c;他可以“瞬移”&#xff0c;每次瞬移需要分别设定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy&#xff0c;瞬移完成后位置会…

电脑设置在哪里打开?Window与Mac双系统操作指南

随着科技的不断发展&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;对于许多初学者来说&#xff0c;如何找到并熟悉电脑的设置界面可能是一个挑战。特别是对于那些同时使用Windows和Mac双系统的用户来说&#xff0c;更是需要一篇详尽的指南来…

【计算机毕业设计】springboot国风彩妆网站

二十一世纪我们的社会进入了信息时代&#xff0c; 信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

ntfs文件系统的优势 NTFS文件系统的特性有哪些 ntfs和fat32有什么区别 苹果电脑怎么管理硬盘

对于数码科技宅在新购得磁盘之后&#xff0c;出于某种原因会在新的磁盘安装操作系统。在安装操作系统时&#xff0c;首先要对磁盘进行分区和格式化&#xff0c;而在此过程中&#xff0c;操作者们需要选择文件系统。文件系统也决定了之后操作的流程程度&#xff0c;一般文件系统…

MySQL存储引擎详解

存储引擎 MySQL体系结构 连接层&#xff1a;与客户端连接&#xff0c;权限校验、连接池服务层&#xff1a;SQL接口和解析、查询优化、缓存、函数引擎层&#xff1a;索引、存储引擎存储层&#xff1a;系统文件、日志&#xff08;Redo、Undo等&#xff09; 存储引擎介绍 不同的…

暴力数据结构之栈与队列(队列详解)

1.队列的定义 队列是一种特殊的线性表&#xff0c;它遵循先进先出&#xff08;FIFO&#xff09;的原则。在队列中&#xff0c;只允许在表的一端进行插入操作&#xff08;队尾&#xff09;&#xff0c;而在另一端进行删除操作&#xff08;队头&#xff09;。这种数据结构确保了最…

【WebGIS实例】(14)MapboxGL 加载地形高程数据

前言 官网示例&#xff1a;Add 3D terrain to a map | Mapbox GL JS | Mapbox 大佬博客&#xff1a;Mapbox GL基础&#xff08;七&#xff09;&#xff1a;地形数据的处理与加载 (jl1mall.com) 加载Mapbox地形数据 map.once(style.load, () > {map.addSource(mapbox-dem,…

改变视觉创造力:图像合成中基于样式的生成架构的影响和创新

原文地址&#xff1a;revolutionizing-visual-creativity-the-impact-and-innovations-of-style-based-generative 2024 年 4 月 30 日 介绍 基于风格的生成架构已经开辟了一个利基市场&#xff0c;它将机器学习的技术严谨性与类人创造力的微妙表现力融为一体。这一发展的核…

Windows11 同时安装jdk8和jdk17 可切换

Windows11 同时安装jdk8和jdk17 可切换 死忠于JDK8的码农们&#xff0c;可能不得不做出一些改变的 因为在springboot3最低也是只能用17 并且最近如果创建springboot项目的时候&#xff0c;你会发现&#xff0c;最低也是17的 并且&#xff0c;如果使用springcloud开发&#x…