APP下载

曲面的算法可视化方法研究与实现

2021-08-01龚光军

安徽职业技术学院学报 2021年2期
关键词:贝塞尔坐标值样条

龚光军

(安徽职业技术学院 教务处,安徽 合肥 230011)

计算机图形学中的曲面相关知识由于其难度较大、涉及到的数学知识点多等特点,使其相关内容的学习变得非常枯燥乏味,在目前的大部分教材中介绍得比较少,有些教材对此部分内容一笔带过,甚至只字不提。但是,作为计算机图形学的组成部分,曲面相关知识不可或缺。目前,在曲面的相关教学过程中,也正是由于其难度大、抽象等特点,授课教师大多只是对其泛泛而谈,或者只是讲解其中的数学矩阵并辅之以几张静态的图片来说明,无法深入解释不同的控制参数对曲面生成形状的影响,而学习者更是一头雾水,不知所云。

在计算机图形学其它内容的讲授过程中,已经有较多院校做出了可视化的辅助软件,大部分都是将计算机图形学中的很多算法(直线算法,圆的算法,椭圆的算法等)通过VC++编程的方式,做出了一套算法可视化的效果,将理论和绘图的实践相互结合,提高算法的可视化程度,使教学质量得到了很大程度的提高。不过,在曲面的算法方面,实现可视化的CAI软件却不常见。基于此,本文对曲面产生原理进行了深入细致的研究,以贝塞尔(Bezier)曲面及B样条曲面为例,建立了可视化的三维坐标系,完成了曲面的参数化输入与控制,通过生成不同参数下的网格曲面,使学习者可以根据自己的理解需求,改变不同参数,观察生成的不同曲面之间的差异,增强对曲面生成原理的深入理解,最终实现曲面算法可视化的目标。

1 曲面的生成算法原理分析

1.1 贝塞尔曲面(Bezier)

Bezier张量积曲面是通过贝塞尔曲线得到的,一般来说,在空间中找到(m+1)行、(n+1)列个点,我们就称下面公式所表达的张量积参数曲面是n×m次的贝塞尔曲面[1]-[2]。

在常见的应用过程中,n与m的数值一般不大于4,本文在可视化演示的过程中,取值为:n=m=3。

1.2 B样条曲面

类似于贝塞尔曲面,B样条曲面也是由B样条曲线推导而来的,一般来说,我们把下面张量积样式所表达的参数曲面称之为:m×n阶的B样条曲面[3]-[4]。

同时,还能够用矩阵形式来表示双三次B样条曲面片为:

在式(5)中,

与贝塞尔(Bezier)曲面比较起来,B样条曲面有保凸性、凸包性和易交互性这些优点,最重要的是它还有局部性的优点,也就是假如变化样条曲面中的任意一个控制顶点,整个曲面中仅有和该顶点关联的区域会出现改变,但是其他的部分不变,这样以来,在设计曲面的过程中,就可以很方便的修改曲面中的任意一个局部形状。

2 三维曲面可视化的原理

2.1 建立坐标系

在建立曲面的坐标系时,本文使用了正等轴测坐标系。建立好的曲面坐标系如下图所示,可视化区域的背景是白色,正等轴侧坐标系中的x轴、y轴和z轴分别相交成120度,如图1所示。

图1 坐标系

在图1中,x、y、z轴的轴向变形系数是相同的。即:

其中,ηx、ηy、ηz是X、Y、Z轴的轴向变形系数。因此,根据斜轴测投影变换的矩阵,可以知道:

解得:

然后,能够算出投影的转换矩阵是:

假设在空间中的任意一个点,其坐标为(x,y,z),通过上述转换矩阵转换以后(X,Y,Z),就得到了这个点在平面中的坐标,其变换的计算公式如下:

经过计算发现,所有的Y坐标值为0,这是由于平面中仅有两个坐标方向。计算出X和Z的坐标以后,还需要将它们转换成计算机中设备坐标系里面的坐标值。这里假设在设备坐标系里面的坐标为(xx,yy),曲面的演示坐标系中的原点在设备坐标系里面有一个相对坐标,这个相对坐标值设为(x X,y Y),则,这些坐标值之间的相互转换公式为:

2.2 动态演示

为了完成曲面动态演示,本文将其分为算法动态演示、曲面形成过程动态演示与数据和参数反馈的动态演示。算法动态演示时,通过指定一个存放程序语句的数组,然后将其根据不同的曲线类型输出到演示窗口,在演示过程中,根据当前演示的步数调整算法文字的显示演示,从而达到算法的动态演示效果和目的。曲面形成过程动态演示与数据和参数的动态演示以Bezier曲面为例来说明。

根据贝塞尔曲面的生成原理可以知道,贝塞尔曲面实际上是参数为u和v的Bezier曲线相互交错而来的。如果将u固定不变,然后将v的取值范围设定在数字0和1之间,这样就可以得到一组曲线,谓之v线,同理,如果将v固定不变,然后将u的取值范围设定在数字0和1之间,这样就可以得到一组u线,这两组曲线组合在一块称之为参数曲线网。本文通过选取适合的u和v变化量,获得了一张Bezier参数曲面网,然后通过程序控制,让这些曲线逐条缓慢的出现,同时将这些曲线出现的顺序与其算法文字同步,这样便达到了曲面形成过程的可视化。如图2所示为Bezier参数曲面网。

图2 Bezier曲面图

依据Bezier曲面的生成原理可知,一个双三次Bezier曲面需要控制顶点的数量为16个,其中有4个是角点。而Bezier曲面肯定会经过这4个角点,但是却不确定是否经过剩下的12个控制点。因此本文在实现曲面数据与参数演示时,只选择显示其中的角点坐标,如图3所示。

图3 Bezier曲面的数据反馈

从图3中可以看出,除了角点的坐标以外,还实时显示了参数u和v的值。在动态演示时,参数u和v每次变化0.05,在从0到1的变化过程中,就会生成20条v线与20条u线,最终组合成Bezier参数曲面网,同时,参数u和v值的变化过程也随着曲线的变化一起实时显示,从而实现曲面和参数的动态演示。

3 曲面控制点更改

曲面的动态演示过程中,可以交互式更改曲面控制点数值,进而根据不同控制点生成的不同曲面去感受参数对曲面的作用和意义。

本文通过对话框模式来实现曲面参数的修改。对话框交互模式是编程中最常见也是最重要的一个功能,它能够根据不同学习者的不同想法来准确变换和更改相关的参数值。因此对话框技术非常适合用来控制曲面,精确、细微的参数变动而发生的曲面形状改变,可以直观地表达曲面生成的原理。曲面控制点设置对话框如图4所示。

图4 曲面的参数修改

通过图4可以看到,列表框中列出了Bezier曲面所有的16个控制点在坐标系里的地方及坐标值[5],如:P00,P30,P03和P33就显示了曲面中四个角点坐标。在需要进行坐标修改时,只需要单击对应的点所在的行,此时,该点的坐标值便出现在旁边的编辑框中,通过更改编辑框中的值并点击确定按钮,则会修改成功。同时,为了表现出两个特殊的曲面形状,本文还设置了两个默认选项,只需点击默认选项按钮便可显示其对应的16个控制点,并生成特殊的曲面,比如其中一种为平面。

4 结语

本文实现了B样条曲面与贝塞尔曲面的算法可视化,图2和图5分别为B样条曲面与贝塞尔曲面。该教学CAI软件实现了“参数输入—曲面生成—参数更改—曲面变化—观察对比—理解曲面生成原理”的循环演示。以直观的曲面生成与变换效果,满足了不同学习者的不同理解需求,大大增加了学习效率与学习质量。

图5 B样条曲面图

猜你喜欢

贝塞尔坐标值样条
双零阶贝塞尔波束的传播及对单轴各向异性球的散射特性*
基于贝塞尔曲线的动态识别区农机避障路径实时规划
看星星的人:贝塞尔
对流-扩散方程数值解的四次B样条方法
大跨度钢结构安装三维坐标拟合转换
基于二分法迭代的凸模数控铣削加工编程*
三次参数样条在机床高速高精加工中的应用
三次样条和二次删除相辅助的WASD神经网络与日本人口预测
高鞋上云
基于样条函数的高精度电子秤设计