首页 > 其他分享 >OpenCASCADE曲线上点的反求

OpenCASCADE曲线上点的反求

时间:2023-11-30 12:31:44浏览次数:36  
标签:上点 反求 曲线 参数 OpenCASCADE 端点

本文主要结合代码介绍OpenCASCADE曲线上点的反求实现原理及使用过程中的一些注意事项。

OpenCASCADE曲线上点的反求

1 Introduction

曲线可以用代数方程表示,如圆可以用X^2+Y^2=R^2表示,也可以用参数方程X(u)=RCos(u), Y(u)=RSin(u)表示。要判断点是不是在线上,用曲线代数方程可以很直接得出结果,但是使用参数方程就没有那么直接。这也是参数曲线上点的反求问题,参数曲线上点的反求问题应用广泛,如前面所述判断点是否在曲线上、点向曲线投影、点与线的求交、点在参数曲线上的参数等,都与点的反求问题相关。本文主要结合代码介绍OpenCASCADE曲线上点的反求实现原理及使用过程中的一些注意事项。

2 实现原理

在《The NURBS Book》书中将点的反求问题归结为点向曲线投影距离最短的问题,如下图所示:

OpenCASCADE曲线上点的反求_代码注释

建立函数f(u)=C’(u).(C(u) - P)表示点到曲线距离,当f(u)=0时为点到曲线的最短距离,不管点P是否在曲线上。几何意义是点到曲线任意点的向量与任意点处的切向量点积为零,表示在两个向量垂直的时候求得极值点。注意数学方程中垂直这个几何意义。

OpenCASCADE中实现曲线上点的反求原理与《The NURBS Book》书中一致。点的反求使用类GeomLib_Tool::Parameter()函数:

OpenCASCADE曲线上点的反求_实现原理_02

输入曲线、点和最大距离,计算点是否在曲线上及若在曲线上,点对应参数曲线的参数U。

OpenCASCADE曲线上点的反求_实现原理_03

类Extrema_ExtPC计算点P到线C的极值Extrema。根据代码注释可以看出点的反求数学方程与《The NURBS Book》书中一致:

OpenCASCADE曲线上点的反求_极值_04

数学方程对应的类的变量为myF,类名为Extrema_FuncExtPC,从类math_FunctionWithDerivative派生,所以必须实现两个关键虚函数Value()和Derivative()。其代码注释说明了这两个函数的实现细节:

OpenCASCADE曲线上点的反求_实现原理_05

其中F(u)对应函数Value():

OpenCASCADE曲线上点的反求_实现原理_06

DF(u)对应函数Derivative(),最后使用Newton法math_FunctionRoots对方程进行求根。

3 注意事项

OpenCASCADE中点的反求GeomLib_Tool::Parameter()、点向曲线投影GeomAPI_ProjectPointOnCurve、点与曲线的交点IntTools_Context::ComputeVE等算法都是使用了Extrema_ExtPC类。

 

当使用GeomLib_Tool::Parameter()函数来判断点是否在曲线上时,注意端点处点的反求要满足垂直的条件,即使点与曲线某个端点距离小于MaxDist时,也是返回false。即对于曲线端点处的情况需要自己预先处理,直接算点P与曲线端点距离与MaxDist比较,先处理端点。

OpenCASCADE曲线上点的反求_极值_07

可以看到这里也处理的端点处的情况,但是最后没有与MaxDist有关系,最后容差是Precision::SquareConfusion()。

OpenCASCADE曲线上点的反求_极值_08

 


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


OpenCASCADE曲线上点的反求_实现原理_09




标签:上点,反求,曲线,参数,OpenCASCADE,端点
From: https://blog.51cto.com/eryar/8628339

相关文章

  • OpenCASCADE 曲线求交
    对于拓朴边提供了求交算法IntTools_EdgeEdge,这个类是使用类似于曲面求交的离散网格法,使用了离散包围盒法。OpenCASCADE曲线求交1IntroductionOpenCASCADE中提供了二维几何曲线的求交类Geom2dAPI_InterCurveCurve,对应到三维几何只提供了GeomAPI_IntCS,GeomAPI_IntS......
  • OpenCASCADE二维曲线求交
    OpenCASCADE二维曲线求交1IntroductionOpenCASCADE中对二维曲线求交和三维曲线求交是不同的,三维曲线求交统一使用离散法,二维曲线求交根据曲线类型的不同分种类型进行处理。二维曲线求交中还提供了计算自交的直接接口。在TKGeomAlgo中,主要内容就是拟合、求交算法,理解求交算法的......
  • 解决折叠面板Collapse上点击复选框会触发折叠面板问题
    问题描述:折叠面板前面加复选框,但是点击复选框会触发折叠面板,将面板打开或折叠,如下 解决方案:给复选框添加组织事件冒泡 e.stopPropagation() 效果如下: ......
  • OpenCASCADE曲线上点的反求
    OpenCASCADE曲线上点的反求eryar@163.com1Introduction曲线可以用代数方程表示,如圆可以用X^2+Y^2=R^2表示,也可以用参数方程X(u)=RCos(u),Y(u)=RSin(u)表示。要判断点是不是在线上,用曲线代数方程可以很直接得出结果,但是使用参数方程就没有那么直接。这也是参数曲线上点的反求......
  • OpenCASCADE - 曲线自交
    OpenCASCADE-曲线自交1IntroductionOpenCASCADE为二维曲线提供了求交及自交的类Geom2dAPI_InterCurveCurve:当传入一个二维几何曲线时可以计算自交self-intersections。但是没有提供直接的三维几何曲线求交的类,也没有直接的计算自交的类。有人同学问OpenCASCADE有没有三维曲......
  • 在移动电话上点击网页链接时如何触发电话呼叫。
    内容来自DOChttps://q.houxu6.top/?s=在移动电话上点击网页链接时如何触发电话呼叫。我需要为移动设备构建一个网页。只有一件事我还没有弄清楚:如何通过点击文本来触发电话呼叫?是否有一个特殊的URL可以像mailto:标签用于电子邮件那样使用?不希望使用特定于设备的解决方......
  • OpenCascade 开源的三维建模几何造型开发平台
    官方文档 https://dev.opencascade.org/doc/overview/html/index.htmlOpenCASCADE(简称OCC)平台是由法国MatraDatavision公司开发的CAD/CAE/CAM软件平台,可以说是世界上最重要的几何造型基础软件平台之一。OpenCASCADE是一套开放原始码的CAD/CAM/CAE几何模型核心,源自于法国......
  • OpenCASCADE 扫掠曲面
    OpenCASCADE扫掠曲面eryar@163.com1Introduction蒙皮(Skinning)就是将一簇截面曲线(sectioncurves)融合在一起生成曲面的过程。蒙皮只是放样(Lofting)的新名词,放样可以追溯到计算机没未诞生的时候,从那时到现在,它一直在造船、汽车和航空工业中被广泛地应用。扫掠(Sweep)研究的是一条......
  • [开源]-OpenCASCADE-IMGUI
    [开源]-OpenCASCADE-IMGUI1IMGUIImGui是一个用于C++的用户界面库,跨平台、无依赖,支持OpenGL、DirectX等多种渲染API,是一种即时UI(ImmediateModeUserInterface)库,保留模式与即时模式的区别参考保留模式与即时模式。ImGui渲染非常快,但界面上有大量的数据集需要渲染可能会有一些......
  • OpenCASCADE GLFW IMGUI
    OpenCASCADEGLFWIMGUI如果从事过C++Windows客户端开发,大家对MFC、Qt、DuiLib、WxWidgets等各种DirectUI应该有了解,本篇给大家介绍一个超级轻量级的C++开源跨平台图形界面框架ImGUI.ImGUI主要用于游戏行业,所有的控件都需要手绘实现,当然性能也是满满的,毕竟是直接用dx/opengl来......