1.Introduction
数(shù)起源于数(shǔ),量(liàng)起源于量(liáng)。古人每次狩猎归来,需要统计猎物的多寡,分配食物时需要把猎物和氏族成员的多少加以比较;尼罗河每年洪水泛滥,洪水退去之后,需要重新丈量土地;建筑房屋、堤坝和巨大的金字塔,需要计算各种图形的面积和体积,所以数学产生于对数量的认识和对几何图形的认识,而最早认识到的数是1, 2, 3这些正整数。大约在1500年前,《孙子算经》中就记载了鸡兔同笼的问题。这一问题的本质是二元一次方程。在解一元二次方程时,根据韦达定理有求根公式,如果判别式b^2 – 4ac 时,就会遇到负数开方的问题,最简单的例子是解方程x^2 + 1 = 0,就会遇到-1开平方的问题,从而引入复数,复数的引入也是为了解方程的方便。还有一类方程如常微分方程、偏微分方程,这些方程的求解归结于数学分析的范畴。
对于一元多次方程,会有这样的问题,如方程根的个数,方程有没有求根公式等。数学王子高斯在1799年21岁时写的博士论文中回答了方程根的个数问题,就是高斯代数基本定理:每个n次方程具有n个根。到1826年阿贝尔证明:高于四次的方程一般不可能有代数解。定理的证明涉及到代数几何,代数曲线、拓扑理论等。一元方程的求解尚且如此困难,那么多元方程的求解就更复杂了。
在几何内核中很多问题可以归结为解方程,如代数曲面与参数曲面求交、计算轮廓线等。本文对相关原理进行介绍,抛砖引玉,结合实际应用激发同学们对于数学学习的兴趣。
2.曲面求交
曲面求交是几何内核中最核心、最重要的问题之一。求交算法的质量直接影响内核的稳定性和实用程度。曲面求交是布尔算法的基础,布尔算法会串起几何内核所有的底层算法。曲面可以用代数方程和参数方程两种形式来表达,因此可以将曲面求交问题归纳为三类:代数/代数曲面求交,代数/参数曲面求交,参数/参数曲面求交。在OpenCASCADE中,一般的二次曲面可以得到代数方程的系数,可以用代数方程表示f(x, y, z) = 0。参数曲面一般用两个参数表示S(u, v)。将参数方程代入代数方程可以得到一个以u, v为变量的二元方程。二元方程是个平面代数曲线,直接计算代数解困难,而用数值算法来求解时,又会遇到奇点和多分支问题。对于代数/参数曲面求交的二元方程求解使用了数值算法Walking来求解,在OpenCASCADE中的类是IntWalk_IWalking,也即Marching Method。
3.轮廓线计算
在隐藏线消除算法中,需要计算模型的可见轮廓边Contour。对于每个面而言,轮廓边的定义为面上可见部分与不可见部分的分界线。计算方式是通过投影方向与面上点的法向点乘来判断:
当g(u) > 0时为可见面front facing,当g(u)时为不可见面。当g(u)=0时,即为轮廓线。对应到OpenCASCADE中为Contap包中的Contap_SurfFunction:
这个方程是从math_FunctionSetWithDerivatives派生,根据注释可知此方程即为上图所示的g(u)=0,其实代码如下所示:
从上述代码可知,曲面轮廓线方程是二元方程。在计算函数值Value()函数中,输入曲面上的参数u, v,计算出参数u,v处的法向后与投影方向点乘。对轮廓线方程进行求解即得到曲面的轮廓线。因为是二元方程,也使用了代数曲面与参数曲面求交的算法IntWalk_IWalking。
4.Conclusion
方程求解是数学中的重要内容,从解方程可以引申出数学的三大内容:分析(微积分、微分方程、偏微分方程)、代数(代数、拓扑)、几何(解析几何、微分几何、黎曼几何等)。因为多元方程的代数解很困难,所以一般都是使用数值解。对于几何内核中曲面求交和轮廓线等问题最后都归结为方程的求解。根据高斯、阿贝尔等先贤的定理知道方程的代数解是困难的,好在数值解要简单很多。理解曲面求交部分的代码,几何内核中其他部分的代码也容易理解了。通过几何内核的应用实现来激发学习数学的兴趣,不仅仅做一个功能接口调用者,要厘清几何算法的来龙去脉,掌握根技术,学以致用。
5.参考文献
1 李大潜. 从复数到四元数. 高等教育出版社. 2022
2 华罗庚. 数学小丛书. 科学出版社. 2018
3 莫里斯•克莱因. 古今数学思想. 上海科学技术出版社. 2014
4 张禾瑞, 郝炳新. 高等代数. 高等教育出版社. 2007
5 钟玉泉. 复变函数论. 高等教育出版社. 2019
6 朱心雄. 自由曲线曲面造型技术. 科学出版社. 2000
7 P. 格列非斯. 代数曲线. 北京大学出版社. 1985
8 冯康. 数值计算方法. 国防工业出版社. 1978
暂无评论内容