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 Trigonometric Function Roots

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

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

      Standard_EXPORT IntAna_IntConicQuad(const gp_Circ& C, const IntAna_Quadric& Q);

    其实现原码中注释如下:

     

    根据其注释,可知其计算过程如下:将圆的方程在其局部坐标系中用参数形式表示,

    将二次曲面方程的系数也变换到圆的坐标系中,因为圆的参数方程中为0,所以将圆的参数方程代入二次曲面的方程后,和z相关的项的系数都可以简化了。

    得到一个三角函数的方程后,这时就要引入基础模块中的数学工具集来解决问题了。

    math_TrigonometricFunctionRoots主要用于对如下形式的三角函数方程进行求解:

    4. Conclusion

    对于圆与二次曲面求交的实现来看,也可以不用变换二次曲面的坐标系,直接将圆的参数方程代入曲面的二次方程中:

    最终化简也可得到一个三角函数方程,但是计算量与变换曲面坐标系对比来看会更大。

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

    5. References

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

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

  • 相关阅读:
    Qt Qwt之坐标轴移动
    Lnux 16.04 VM下安装与汉化
    【学习笔记】开源日志记录工具log4j使用方法
    【学习笔记】关于DOM4J:使用DOM4J解析XML文档
    DOM的概念和简单应用:使用DOM解析XML数据
    初识Socket通信:基于TCP和UDP协议学习网络编程
    java 中的Scanner
    跟着前辈学编程
    集合应用案例:编写程序实现学生信息管理系统的录入登录
    简单Java程序向实用程序的过度:二进制文件的读写
  • 原文地址:https://www.cnblogs.com/opencascade/p/IntAna_Circle.html
Copyright © 2011-2022 走看看