PCurve - Curve on Surface

eryar@163.com

Abstract. 本文通过给出曲面上曲线PCurve的定义来对OpenCascade中的Curve On Surface进行理解,并介绍了OpenCascade对应的类BRep_CurveOnSurface实现。通过Tcl脚本输出的球的拓朴信息,分析PCurve的实际应用。

Key words. OpenCascade, ACIS, PCurve, Curve on Surface, Parametric Surface

1. Introduction

不管是ACIS还是OpenCascade中都有PCurve这个概念,字面上来理解就是参数曲线(Parametric Curve)。在《基于ACIS的几何造型技术与系统开发》中也看到这个概念,如下图所示:

Figure 1.1 PCurve Entity of ACIS

“参数空间曲线是在参数曲面的双参数空间中的二维样条曲线。类pcurve是附加在参数曲面之间公共边上的数据结构。”看完之后,对pcurve的概念还是不太清楚。本文给出PCurve的定义,并介绍PCurve在OpenCascade中的实现。根据定义可以对PCurve有个基本认识。

2. Definition of PCurve

PCurve为曲面上的曲线(Curve on Surface),其定义为:设曲面方程为

令参数u,v又是另一参数t的函数,即

将其代入曲面方程,得到:

当t变化时,就得到曲面上的一条单参数曲线,称为曲面上的曲线或简称曲面上曲线(Curve on Surface)。若以s表示曲面上曲线的弧长,则由复合函数的求导公式可得弧长微分公式:

令:

则有:

在古典微分几何中,上式称为曲面的第一基本公式,E,F,G称为第一基本量。在曲面上,每一点的第一基本量与参数化无关,在整张曲面上,第一基本量是参数u和v的连续函数。读者注意,弧元ds是曲线的几何不变量,与曲面的参数化无关。关于曲线曲面更多的信息,请参考《微分几何》、《计算几何》之类的书籍。本文主要为了理解曲面上曲线PCurve的概念及其在OpenCascade中的实现。

目前对PCurve的应用还不太清楚,但是微分几何中引入这个概念肯定是有他的意义,就像在程序设计中引入Pimpl(pointer to implementation)这个idiom。尽管引入Pimpl idiom会增加内存的额外开销,甚至因为增加了间接层使程序代码变得不易读和不好调试,但是人们仍然乐于使用。站在API设计者的角度,它能隐藏信息、降低耦合、减少文件间的依赖,加快编译速度、且可使生成的库的兼容性更好等等,很多优点。所以在《Effective C++》和《API Design for C++》中,作者反复提到并使用Pimpl idiom。类比微分几何引入的PCurve,先在此做上标记,如果有了新的理解再做分析。

3. PCurve in OpenCascade

在OpenCascade中对应于曲面上曲线PCurve的类是BRep_CurveOnSurface,其文档中的说明为:Representation of a curve by a curve in the parametric space of a surface.

结合定义上面这句话就好理解了。现摘抄部分代码来分析PCurve的定义和使用:

//=======================================================================
//function : BRep_CurveOnSurface
//=======================================================================
BRep_CurveOnSurface::BRep_CurveOnSurface(const Handle(Geom2d_Curve)& PC, const Handle(Geom_Surface)& S, const TopLoc_Location& L) :BRep_GCurve(L,PC->FirstParameter(),PC->LastParameter()),myPCurve(PC),mySurface(S)
{
}//=======================================================================
//function : D0
//=======================================================================
void BRep_CurveOnSurface::D0(const Standard_Real U, gp_Pnt& P) const
{// shoud be D0 NYIgp_Pnt2d P2d = myPCurve->Value(U);P = mySurface->Value(P2d.X(),P2d.Y());P.Transform(myLocation.Transformation());
}

从其构造函数来看,要生成一个PCurve必须有曲线PC和曲面S及位置L。

从求PCurve的零次微分的函数D0可以看出,只需要一个参数U就可以计算出曲面上的点P。结合前面介绍的PCurve的定义,不难理解这段代码的意义。下面通过分析球面的拓朴结构,看看PCurve的应用。

Figure 3.1 Sphere in Draw Test Harness

4. Code Demo

下面的程序生成一个球,再把其拓朴结构显示出来,可以看到其中就有PCurve的信息。使用Tcl脚本程序示例如下:

pload ALL
psphere s 1.0
dump s

以上Tcl脚本在OpenCascade的Draw Test Harness中运行结果如下所示:

Figure 4.1 PCurve in Sphere

由上图可知,球的Edge5由一个PCurve来表示。曲面上曲线PCurve在拓朴结构输出的信息位于Curve2ds中,曲面的几何数据位于surfaces中,分别如下图所示:

Figure 4.2 PCurves of Sphere

PCurve编号为4的是条直线,起点(0,-1.570796),方向为(1,0)即X方向。

Figure 4.3 Surfaces of Sphere

曲面编号为1的是一个球面,圆心(0,0,0),半径为1,坐标系与世界坐标系相同。

结合PCurve 4和曲面1及PCurve的参数范围,可以计算出曲面上的一条曲线上的坐标值。不过上面球面的例子中的Edge是degenerated边,退化成一个点了。

由上面球的拓朴信息可知,在理解了参数曲线曲面(有向性)、奇点(Singular Point),参数曲面的奇异性(Singularity)、曲面上曲线(PCurve)等概念后,OpenCascade的拓朴结构就可以基本理解了。

5. Conclusions

本文通过给出曲面上曲线PCurve的定义来对OpenCascade中的Curve On Surface进行理解,并介绍了OpenCascade对应的类BRep_CurveOnSurface实现。

通过Tcl脚本输出的球的拓朴信息,看看PCurve的实际应用,从中可以看出使用Tcl的简单与便捷。

6. References

1. 朱心雄,自由曲线曲面造型技术,科学出版社,2000

2. 王仁宏 李崇君 朱春钢,计算几何教程,科学出版社,2008

3. 陈维桓,微分几何,北京大学出版社,2006

4. 詹海生 李广鑫 马志欣,基于ACIS的几何造型技术与系统开发,清华大学出版社,2002

PDF Version: PCurve - Curve on Surface

转载于:https://www.cnblogs.com/opencascade/p/3601859.html

PCurve - Curve on Surface相关推荐

  1. 图形的认识(curve,surface,hypersurface)

    平滑函数(smooth function): curve:曲线: 二维平面: surface:曲面: 三维空间: hypersurface:超曲面: 更高维度: 1. surface 是对平面的泛化, ...

  2. OpenCASCADE Make Primitives-Sphere

    为什么80%的码农都做不了架构师?>>>    OpenCASCADE Make Primitives-Sphere eryar@163.com Abstract. The sphe ...

  3. OpenCascade Primitives BRep - Box

    为什么80%的码农都做不了架构师?>>>    OpenCascade Primitives BRep - Box eryar@163.com Abstract. BRep is s ...

  4. OpenCascade Primitives BRep - Sphere

    为什么80%的码农都做不了架构师?>>>    OpenCascade Primitives BRep - Sphere eryar@163.com Abstract. BRep i ...

  5. OpenCascade Primitives BRep-Cylinder

    为什么80%的码农都做不了架构师?>>>    OpenCascade Primitives BRep-Cylinder eryar@163.com Abstract. BRep i ...

  6. 几何算法——5.关于ACIS和Parasolid求交的调研以及返回参数设计

    关于ACIS和Parasolid求交的调研以及返回参数设计 1. Parasolid求交 1.1 曲线/曲线交点(CCI) 1.1.1 接口 1.1.2 交点类型 1.1.3 错误类型 1.1.5 o ...

  7. 3D中的OBJ文件格式详解(转载)

    OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模 ...

  8. 3D中OBJ文件格式详解

    常见到的*.obj文件有两种:第一种是基于COFF(Common Object File Format)格式的OBJ文件(也称目标文件),这种格式用于编译应用程序:第二种是Alias|Wavefron ...

  9. matlab fittype 求不出参数,[转]matlab 中fit fittype

    1.确定要拟合的类型 一般情况下matlab会直接提供常用的类型,用fittype创建拟合模型.至于matlab具体提供了哪些模型,参见帮助"List of library models f ...

  10. 机器学习和计算机视觉有关的数学

    1.线性代数(Linear Algebra): 我想国内的大学生都会学过这门课程,但是,未必每一位老师都能贯彻它的精要.这门学科对于Learning是必备的基础,对它的透彻掌握是必不可少的.我在科大一 ...

最新文章

  1. delphi 使用UDP收发数据
  2. zoeDylan.js框架-数据底层
  3. FireEye:2012年下半年高级威胁分析报告
  4. 机器学习入门(1)之基本概念简介
  5. Dollar toolbox 学习笔记(一)
  6. react跳转到网络异常页面_React错误边界处理
  7. python串口模块_Python使用pip安装pySerial串口通讯模块
  8. 原始图片中的ROI如何映射到到feature map?(转)
  9. java.util.concurrent 同步器框架详解
  10. mac 安装虚拟机win11
  11. 计算机网络八大性能指标
  12. Day01 字体样式,变形的旋转 缩放 位移和线性渐变
  13. 地理信息系统(GIS)与数字地球
  14. CSDN周赛第32期:赢图书《金融级IT架构:数字银行的云原生架构解密》 和定制周边
  15. 杰奇小说系统百度地图生成插件
  16. 前端与后台(学习自某B站Up主)
  17. Metis异常检测初体验
  18. 聊聊程序员的成长与如何实现价值提升
  19. 【好记性不如烂笔头】记一次奇怪的“找不到符号”问题
  20. 阿里资深软件测试工程师推荐—混沌工程(Chaos Engineering)初识

热门文章

  1. GitHub使用.md
  2. 二年级四则运算扩展,可以指定题目数量,并可支持真分数运算
  3. 8,EasyNetQ-多态发布和订阅
  4. hibernate映射(一对一、一对多、多对一、多对多)配置 【转】
  5. Ruby module ---模块,组件
  6. matlab写入二进制文件注意事项
  7. (学习日记)裘宗燕:C/C++ 语言中的表达式求值
  8. DFS 下沙小面的(2)
  9. panel items 添加指定位置_通过gitlab-ci自动添加prometheus业务监控
  10. 洛谷2142高精度减法(模板)