zoukankan      html  css  js  c++  java
  • 解析几何求交之直线与二次曲面

    解析几何求交之直线与二次曲面

    eryar@163.com

    Abstract. OpenCASCADE provides the analytic intersection between a conic and a quadric in the package IntAna.

    Key Words. Analytic geometry, intersection, coninc, quadric 

    1. Introduction

    OpenCASCADE中的包IntAna提供了解析几何曲线(二次曲线)与解析曲面(二次曲面)求交、解析曲面与解析曲面求交的功能。其中IntAna分别是Intersection Analytic的前三个字母缩写,表示解析几何求交。

    我们学过了《线性代数》中的二次型,其中二次型在解析几何中的一个应用就是二次曲线和二次曲面方程的化简及其性质的分析。

    本文主要结合源码分析直线与二次曲面求解的实现来抛砖引玉,后期将二次曲线与二次曲面求交的各种情况做全面分析。

    2. Quadratic form

    在解析几何中,为了便于研究二次曲线

    的几何性质,我们可以选择适当的坐标旋转变换

    把方程化成标准形式:

    根据标准形式中的系数来分析这个二次曲线是什么曲线,即圆、椭圆、抛物线、双曲线。

    OpenCASCADE中解析几何的二次曲面有以下几种类型:

    l gp_Pln:平面可看作二次曲面的特例

    l gp_Sphere:解析球面

    l gp_Cylinder:解析柱面

    l gp_Cone:解析锥面

    这些解析曲面都可以统一使用二次多项式来表示,即这个二次多项式的系数确定了一个二次曲面。OpenCASCADE中相应的类是IntAna_Quaric

     

     3. Math Direct Polynomial Roots

    OpenCASCADE中类IntAna_IntConicQuad中提供了二次曲线与二次曲面求交功能,其中计算直线与二次曲面相交的函数是:

      //! Creates the intersection between a line and a quadric.

      Standard_EXPORT IntAna_IntConicQuad(const gp_Lin& L, const IntAna_Quadric& Q);

    其实现原码中注释如下:

     

    根据其注释,可知其计算过程如下:将直线方程用参数形式表示,

    将参数表示的直线方程代入二次曲面方程,化简可得一个二次多项式,对二次多项式进行求解即得直线与二次曲面的交点。

    得到一个二次多项式的方程后,这时就要引入基础模块中的数据工具集来解决问题了。

     

    math_DirectPolynomialRoots可以用来对4次及以下的多项式方程进行求解。对于化简后的直线与二次曲面方程是一个二次多项式方程,则使用这个类直接进行求解。

    4. Conclusion

    从上面的源码分析可知,在OpenCASCADE中对于解析曲线与曲面求交使用二次多项式系数来表示的。通过将方程化简后直接使用math包中的工具对方程进行求解。

    使用OpenCASCADE熟练会发现他们的编码风格也是有一定的套路的,即一个类会提供几个构造函数,将不同参数进行输入。有的在构造函数中调用初始化函数Init()来对算法需要的其他输入数据进行初始化,有的则直接在构造函数中调用的计算函数Perform()。如果构造函数中没有调用计算函数Perform(),则需要手动调用Perform()。算法的成功通过函数IsDone()来检测。根据检测判断是否取出计算值。

    春节就要到了,祝大家在新的一年里心想事成,万事如意!

    5. References

    1. 同济大学应用数学系. 线性代数(第四版). 高等教育出版社

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

  • 相关阅读:
    poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
    poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
    poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
    hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
    hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
    Gym 100512F Funny Game (博弈+数论)
    UVa 12714 Two Points Revisited (水题,计算几何)
    UVa 12717 Fiasco (BFS模拟)
    UVa 12718 Dromicpalin Substrings (暴力)
    UVa 12716 && UVaLive 6657 GCD XOR (数论)
  • 原文地址:https://www.cnblogs.com/opencascade/p/IntAna_IntConicQuad.html
Copyright © 2011-2022 走看看