OpenCASCADE Rational Bezier Curves

eryar@163.com

Abstract. Although polynomials offer many advantages, there exist a number of important curve and surface types which cannot be represented precisely using polynomials, e.g., circles, ellipses, hyperbolas, cylinders, cones, spheres, etc. So we introduce the concepts of rational curves and homogeneous coordinates to solve the problem. To understand rational curves in a homogenous coordinate system is more straightforward. If you define irrational Bezier curves in 4D space and then project them back into 3D space, you obtain rational curves.

Key Words. OpenCASCADE, Rational Curves, Homogenous Coordinate, Geom_BezierCurve

1. Introduction

由于采用了Berstein基函数,Bezier曲线具有许多良好的性质。但是作为多项式曲线,在表示一些“基本”曲线时还是有所不足。例如半径为1的圆弧曲线,其参数方程可表示为:

圆弧曲线并不是多项式曲线,所以Bezier曲线不可能精确表示像圆弧这样的简单曲线。经过参数变换t=tan(u/2),可以把上面的圆弧表示为:

这说明可以用有理多项式来精确表示圆弧曲线。事实上,有很多重要的曲线、曲面类型,如圆、椭圆、双曲线、圆柱面、圆锥面、球面等,都无法用Bezier来精确表示。由经典数学可知,包括圆在内的所有二次曲线都可以用有理函数(即两个多项式相除)来表示,即如下形式的有理函数来表示:、

本文主要从齐次坐标的表示法上来理解有理Bezier曲线的概念,及结合OpenCASCADE中的Bezier曲线来理解权因子的几何意义。

2. Homogeneous Coordinates

在《计算几何》、《计算机图形学》或《计算机辅助几何造型技术》等书中,都会给出有理曲线的齐次坐标(Homogeneous Coordinates)表示法,藉此来从几何上直观理解有理曲线的意义。刚开始接触齐次坐标的概念时,很不能理解,原来这是射影几何中的一些概念。对此概念陌生的读者可以参考丘维声的《解析几何》,其中对齐次坐标、交比等概念作了详细解释。

现在我们来说明齐次坐标与仿射坐标的关系。设点M是平面上的通常点,(x,y)是它对于标架[O1:e1,e2]的仿射坐标,则对于标架[O2:e1,e2,e3]的坐标就是(x,y,1),于是点M的齐次坐标(x1,x2,x3)与(x,y,1)成比例:

其中λ≠0.从而得:

因此,通常点的齐次坐标和仿射坐标可以互相确定。有时我们把通常点M的仿射坐标(x,y)称为它的非齐次坐标。

从四维Euclidean空间的齐次坐标到三维Euclidean空间的中心投影变换

这里三维空间的点[X,Y,Z]称为四维空间点[X,Y,Z,ω]的透视像,就是四维空间点[X,Y,Z,ω]在ω=1超平面上的中心投影,其投影中心就是四维空间的坐标原点。因此四维空间点[X,Y,Z,ω]与三维空间点[X,Y,Z]被认为是同一点。事实上,对任意X,Y,Z,ω1,ω2,其中ω1≠ω2,有:

由上可知:一个点的齐次坐标不是唯一的。

在CAGD中描述形状的空间曲线与曲面都要用到三维空间。但是人类思维能力的限制,我们无法用图形或模型来表达从四维空间到三维空间的投影变换关系。为了理解这种投影变换的几何关系,我们可以降低一维,考察从三维到二维空间的投影变换,如下图所示为三维空间的齐次坐标到二维空间的投影。

Figure 2.1 A representation of Euclidean points to homogeneous form

关于中心投影、射影平面、齐次坐标、变比等概念,可参考丘维声的《解析几何》一书。

3. Bezier Curve Perspective Map

在理解射影变换(Perspective Map)及齐次坐标的概念后,可以构造有理Bezier曲线的几何模型。现假设给定控制点{Pi},权因子{ωi},我们构造带权控制点:

然后在四维空间中定义非有理(即多项式)Bezier曲线:

将带权控制点代入上式详细写出每一项得:

以原点为中心,将四维的Bezier曲线投影到ω=1的三维超平面上,所得到的投影曲线为:

消去λ即得到有理Beizer曲线:

4. The Effects of Weighting Factors

有理Bezier曲线除了具有类似于Bezier曲线的性质外,还增加了关于“权因子”(Weights)的调整性质。

4.1 可退化性

当权因子ωi=ω≠0时(i=0,1,...,n),有理Bezier曲线退化成Bezier曲线。因为ω相同,所以有理Bezier曲线公式中的ω可以消去,又根据Bernstein基函数的规范性即得。使用OpenCASCADE的Tcl脚本测试效果如下图所示:

Figure 4.1 Degeneracy of Rational Bezier Curve

相应的Tcl脚本如下所示:

#
# Copyright (c) 2014 eryar All Rights Reserved.
#
# File : degenerate.tcl
# Author : eryar@163.com
# Date : 2014-09-19 18:10
# Version : 1.0v
#
# Description : Demonstrate the degeneracy of Rational Bezier Curve.
# pload ALL # Bezier Curve with Weighted Poles:
# {P(1,0), w(1)}, {P(1,1), w(1)}, {P{0,1}, w(1)}
2dbeziercurve bc1 v2d
2dfit # Bezier Curve without weights:
2dbeziercurve bc2
mkedge e1 bc2 vdisplay e1
vtop
vfit

上述Tcl脚本中先把权值相同的有理Bezier曲线显示在二维窗口中,再将不带权的Bezier曲线(控制节点与带权值相同),先生成Edge,再在三维窗口中显示出来。由图可知,当有理Bezier曲线的权值相同时,即退化为非有理的Bezier曲线。

4.2 当ω0≠0,ωn≠0时,对任意u∈[0,1],

只需证明u∈[0,1]的情况,

这说明只要ω0≠0,ωn≠0,有理Bezier曲线R(u)一定通过首末控制顶点P0和Pn。对u∈[0,1],当ωi越大,R(u)越趋向于Pi;反之,当ωi越小,R(u)越远离Pi。

可以看出ωi→∞的极限状态时,R(u)即过通过Pi。使用OpenCASCADE的Tcl脚本来验证得到如下图所示结果:

Figure 4.2 Rational Bezier Curve with different Weights

相应的Tcl脚本如下所示:

#
# Copyright (c) 2014 eryar All Rights Reserved.
#
# File : degenerate.tcl
# Author : eryar@163.com
# Date : 2014-09-19 18:10
# Version : 1.0v
#
# Description : Demonstrate the Rational Bezier Curve with different weights.
# pload ALL set w1 0.1
set w2 0.5
set w3 1.0
set w4 2.0
set w5 5.0 set u 0.5 # 4 Bezier Curve with defferent Weighted Poles:
# {P(1,0), w(1)}, {P(1,1), w($w)}, {P{0,1}, w(1)}
2dbeziercurve bc1 $w1
2dbeziercurve bc2 $w2
2dbeziercurve bc3 $w3
2dbeziercurve bc4 $w4
2dbeziercurve bc5 $w5 # mark weight factor.
2dcvalue bc1 $u x1 y1
2dcvalue bc2 $u x2 y2
2dcvalue bc3 $u x3 y3
2dcvalue bc4 $u x4 y4
2dcvalue bc5 $u x5 y5 dtext x1 y1 w1=$w1
dtext x2 y2 w2=$w2
dtext x3 y3 w3=$w3
dtext x4 y4 w4=$w4
dtext x5 y5 w5=$w5 v2d
2dfit

上述代码显示了一条三个控制顶点2次的有理Bezier曲线当控制顶点P(1,1)对应的权因子ω变化时的不同的情况。当ω增大时,导致曲线被拉向控制顶点;当ω减小时,导致曲线被推离控制顶点。当ω趋于无穷大时,此时曲线将退化为与控制顶点重合的一个点。

5. Bezier Geometry Curve

OpenCASCADE中的Bezier曲线Geom_BezierCurve本身就是有理Bezier曲线,且都是基于BSplCLib包实现的。即有理Beizer曲线也是NURBS曲线的特例。如下图所示:

当构造函数只有控制顶点时,将会构造一个非有理的Beizer曲线。当构造函数将控制顶点对应的权因子也设置进来时,将会构造一个有理Bezier曲线。当构造有理Beizer曲线时,若控制顶点的所有权值都相同,则认为是非有理Bezier曲线,即退化性质的体现。

6. Conclusion

综上所述,由齐次坐标表示法来理解有理Bezier曲线的概念还是比较直观的,进而可以去理解NURBS曲线曲面的概念。

有理Beizer曲线与非有理Bezier曲线的区别就是权因子。若控制点对应的权因子都相同时,有理Beizer曲线退化为非有理Bezier曲线。且权因子的值越大,则曲线越接近对应的控制顶点。权因子对曲线还有很多重要性质,读者可以参考其他相关书籍。

OpenCASCADE中的Beizer曲线是基于BSplCLib包实现的,即是NURBS曲线的特例。所以可以表示有理有非有理的Bezier曲线。

7. References

1. 数学手册编写组. 数学手册. 高等教育出版社. 1979

2. 丘维声. 解析几何. 北京大学出版社. 1996

3. 苏步青,刘鼎元. 计算几何. 上海科学技术出版社. 1981

4. 苏步青,华宣积. 应用几何教程. 复旦大学出版社. 2012

5. 莫蓉,常智勇. 计算机辅助几何造型技术. 科学出版社. 2009

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

7. 赵罡,穆国旺,王拉柱译. 非均匀有理B样条. 清华大学出版社. 2010

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

9. 孙家广. 计算机图形学. 清华大学出版社. 2000

10. 孙家广. 计算机辅助几何造型技术. 清华大学出版社. 2000

11. 王国瑾,汪国昭,郑建民. 计算机辅助几何设计. CHEP & Springer-Verlag. 2001

12. Les Piegl, Wayne Tiller. The NURBS Book. Springer-Verlag. 1997

13. Kelly Dempski. Focus on Curves and Surfaces. Premier Press. 2003

14. OpenCASCADE. Test Harness User’s Guide 6.7.1. 2014

15. OpenCASCADE. ModelingData User’s Guide 6.7.1. 2014

PDF Version and Tcl Scripts: OpenCASCADE Rational Bezier Curves

OpenCASCADE Rational Bezier Curves的更多相关文章

  1. FCC---Learn How Bezier Curves Work---定义坐标轴点的值,影响斜率,改变速度。具体调试换值既可以体会

    The last challenge introduced the animation-timing-function property and a few keywords that change ...

  2. OpenCASCADE Conic to BSpline Curves-Hyperbola

    OpenCASCADE Conic to BSpline Curves-Hyperbola eryar@163.com Abstract. Rational Bezier Curve can repr ...

  3. OpenCASCADE Conic to BSpline Curves-Parabola

    OpenCASCADE Conic to BSpline Curves-Parabola eryar@163.com Abstract. Rational Bezier Curve can repre ...

  4. OpenCascade B-Spline Basis Function

    OpenCascade B-Spline Basis Function eryar@163.com Abstract. B-splines are quite a bit more flexible ...

  5. 插入2D点,在WPF中使用Bezier曲线

    原文Interpolate 2D points, usign Bezier curves in WPF Interpolate 2D points, usign Bezier curves in WP ...

  6. FCC---Make Motion More Natural Using a Bezier Curve--- juggling movement

    This challenge animates an element to replicate the movement of a ball being juggled. Prior challeng ...

  7. [算法]Comparison of the different algorithms for Polygon Boolean operations

    Comparison of the different algorithms for  Polygon Boolean operations. Michael Leonov 1998 http://w ...

  8. HTML5资料

    1 Canvas教程 <canvas>是一个新的用于通过脚本(通常是JavaScript)绘图的HTML元素.例如,他可以用于绘图.制作图片的组合或者简单的动画(当然并不那么简单).It ...

  9. Computer Graphics Research Software

    Computer Graphics Research Software Helping you avoid re-inventing the wheel since 2009! Last update ...

随机推荐

  1. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  2. 半吊子学习Swift--天气预报程序-获取天气信息

    昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...

  3. Torch7学习笔记(二)nn Package

    神经网络Package [目前还属于草稿版,等我整个学习玩以后会重新整理] 模块Module module定义了训练神经网络需要的所有基础方法,并且是可以序列化的抽象类. module有两种状态变量: ...

  4. 9_bootstrap less 移动端

    chrome,firefox提供了"Device Emulation"功能,可模拟常见的各种浏览设备 android ADT或ios Xcode附带的设备模拟器,或第三方在线测试工 ...

  5. webservice 小小例子

    Web Service的主要目标是跨平台的可互操作性.为了实现这一目标,Web Service 完全基于XML(可扩展标记语言).XSD(XML Schema)等独立于平台.独立于软件供应商的标准,是 ...

  6. / fluxChatDemo / 系列 ——项目安装坑洼简要

    第一部分 1.使用import引入时,路径选错 2.React.Component 注意大写 (极浅的坑都掉,原谅我初级中的初级~还是贴出来吧) 3.不知为何运行起来没有内容,都怪自己不熟就上路,以为 ...

  7. unison+inotify

    hostnamectl --static set-hostname tCentos 1.下载文件到/usr/local/srcocamlunisoninotify-tools 2.安装inotify- ...

  8. 如何用js得到当前页面的url信息方法(JS获取当前网址信息)

    设置或获取对象指定的文件名或路径. alert(window.location.pathname) 设置或获取整个 URL 为字符串. alert(window.location.href); 设置或 ...

  9. jQuery中事件与动画的总结

       1.加载DOM     1.1.window事件 window.onload=function(){}.... 时机:其他资源都加载完毕后,再执行   $(function(){}) ……:只是 ...

  10. Android应用性能优化(转)

    人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...