首页 > 其他分享 >OpenCASCADE曲面求交之迭代法

OpenCASCADE曲面求交之迭代法

时间:2023-05-27 23:35:10浏览次数:42  
标签:求交 迭代 参数 OpenCASCADE 曲面 交点 迭代法

OpenCASCADE曲面求交之迭代法

[email protected]

1 Introduction

朱心雄等著《自由曲线曲面造型技术》书中对曲面求交的迭代法有详细介绍,其中关于曲面迭代求交的原理介绍如下:为求得两个曲面精确的交点,Newton-Raphson迭代法得到广泛应用,该法的优点为

  • 计算精度高,速度快,在初值选择比较合理的情况下,一般仅需要迭代二到三次就可以使交点的精度从百分之几提高到万分之几甚至百万分之一的数量级。
  • 适用范围广,只要能获得曲面的几何位置、切矢、法矢等信息,不论什么类型的曲面都可以使用迭代法。

其缺点是对初始值要求较严格,初始值选择不当,可能导致迭代不收敛,也就无法得到精确的交点。

在曲面求交等问题中,一般可根据参与变化的参数数量将迭代法分为三参数迭代法和四参数迭代法两种类型。我们知道,一张参数曲面有两个参数,两张参数曲面共有四个参数变量。采用三参数迭代法时,两个曲面的四个参数中只有三个参数参与迭代过程,而保持另一个参数固定不变,这实际上就是计算不变参数的等参数线与另一张曲面的交点。采用四参数迭代法时,两张曲面的四个参数变量都参与迭代过程,四者都可能变化。两种迭代法各有其优缺点。在下述情况下以应用三参数迭代法为宜:

  • 要求将交点迭代至某参数线上,以利于后继追踪求交法中滤除无效初值点;
  • 当交线接近于参数边界时,希望将交点迭代至准确的边界上,以便进行裁剪等操作。

但对于一般交点,三参数法则未必适用。首先遇到的问题是在四个参数中选择何者作为不变参数,固定参数选择不当可能降低迭代收敛速度以至根本不收敛,或者破坏交线拓朴结构的正确性。迭代法本身不能够成独立的求交方法,主要在追踪法中使用,OpenCASCADE中曲面求交追踪法的类是IntWalk_PWalking。本文主要介绍OpenCASCADE曲面求交迭代法的类IntWalk_TheInt2S的用法及原理。

2 Newton迭代求交

OpenCASCADE中两曲面求交迭代法由类IntWalk_TheInt2S实现,其类中主要函数有:

给定两个曲面,和初始估计点在两个曲面上的参数(u1, v1), (u2,v2),迭代计算出精确交点。固定三参数的方式总共分四种类型IntImp_ConstIsoparametric:

IntImp_UIsoparametricOnCaro1:是固定估计点在曲面1上的参数u;

IntImp_VIsoparametricOnCaro1:是固定估计点在曲面1上的参数v;

IntImp_UIsoparametricOnCaro2:是固定估计点在曲面2上的参数u;

IntImp_VIsoparametricOnCaro2:是固定估计点在曲面2上的参数v;

为了避免三参数迭代法找不到交点的情况,会在四个方向上分别进行计算,总有一个方向上会找到交点,并将找到交点的参数固定情况返回:

在函数Perform()中通用求解迭代方程组,得到精确交点:

其中迭代方程组为成员变量myZerParFunc,方程组求解使用类math_FunctionSetRoot。由方程组求解类注释可知,需要方程组的一阶偏导数即梯度Gradient,采用的是Newton迭代法。若方程组有解Root且满足精度要求,则保存下精确交点的坐标值及在两个曲面上的参数值等数据。

 

3 三参数迭代方程组

三参数迭代方程类为GeomInt_TheFunctionOfTheInt2SOfThePrmPrmSvSurfacesOfWLApprox,

是从类math_FunctionSetWithDerivatives派生的,即三参数迭代方程是个方程组(Function Set)。其定义在文件IntImp_ZerParFunc中,先使用函数ComputeParameters()根据固定参数类型来确定估计点的固定参数及另外三个参数变量的初始值:

设两个参数曲面S1(u1,v1),S2(u2,v2),并已知一交点的初估计点P0,P0点在两张曲面上对应的投影点分别为P1=S1(u0,v0)和P2=S2(s0,t0)。由于P0点为一估计点,所以P1和P2并不重合。设以s0作为固定参数,即当固定参数类型为IntImp_UIsoparametricOnCaro1时,则问题转化为求u*,v*,t*,使两曲面片上的点S1(u*,v*)和S2(s0,t*)重合。建立方程组:

R(u,v,t)=S1(u,v) - S2(s0, t)

通过函数计算两个曲面上的点pntsol1和pntsol2,得到三个变量的方程组的值。

因为要使用Newton迭代法,需要提供方程组的一阶偏导数,即Jacobian矩阵:

函数Derivatives()用来计算一阶偏导数:

4 Conclusion

综上所述,迭代法本身不能构成一个独立的求交方法,与所有不动点迭代法一样,应用迭代法求交线之前,首先必须给出交点的初始估计值,而交点的初始值必须通过其他求交方法得到。因此,迭代交交常同其它求交方法结合使用,作为交点精化的一种手段。迭代法的主要过程是根据初始估计点的几何性质(如坐标位置、切矢、法矢、曲率等)运用Newton方法得到一个较原估计点更接近于目标点(即精确交点)的估计点。如此反复进行,直到求得的交点满足所要求的精度。该法的优点是在初值比较好时其收敛速度非常快,而且能应用于任意参数曲面包括Coons曲面和等距曲面,因此应用非常广泛,其主要缺点是对初始值要求比较苛刻,初始值 选择不当有可能导致迭代不收敛。

OpenCASCADE中曲面求交的迭代法也不是独立的方法,与之配合的有离散网格求交得到初值,在追踪中作用迭代法。迭代求交使用的是三参数迭代法,根据三参数迭代法的数学方程可知,需要计算曲面上参数对应的点和切矢。

标签:求交,迭代,参数,OpenCASCADE,曲面,交点,迭代法
From: https://www.cnblogs.com/opencascade/p/IntWalk_TheInt2S.html

相关文章

  • OpenCASCADE曲面求交之网格离散法3
    OpenCASCADE曲面求交之网格离散法[email protected]由朱心雄等著《自由曲线曲面造型技术》书中对曲面求交之网格离散法描述如下:该法的基本思想是先将曲面离散为由小平面片组成的网格,当网格足够密时,可以认为已经非常接近真实曲面,对分别表示不同曲面的两张网格,利用平......
  • OpenCASCADE曲面求交之网格离散法2
    OpenCASCADE曲面求交之网格离散法[email protected]由朱心雄等著《自由曲线曲面造型技术》书中对曲面求交之网格离散法描述如下:该法的基本思想是先将曲面离散为由小平面片组成的网格,当网格足够密时,可以认为已经非常接近真实曲面,对分别表示不同曲面的两张网格,利用平......
  • OpenCASCADE曲面求交之网格离散法1
    OpenCASCADE曲面求交之网格离散法[email protected] 1Introduction由朱心雄等著《自由曲线曲面造型技术》书中对曲面求交之网格离散法描述如下:该法的基本思想是先将曲面离散为由小平面片组成的网格,当网格足够密时,可以认为已经非常接近真实曲面,对分别表示不同曲面的两张网格,利用......
  • 该算法 转速环采用广义预测控制和扩展状态观测器作为前馈叠加输出为给定转矩 给定转矩
    该算法转速环采用广义预测控制和扩展状态观测器作为前馈叠加输出为给定转矩给定转矩经过牛顿迭代法数值求解得到dq电流仿真表明具有良好的调速性能和抗干扰能力ID:7678651585887577......
  • opencascade下载安装
    安装要求(https://www.opencascade.com/components/cad-simplification-component/)下载地址:https://dev.opencascade.org/release截图如下(从https://dev.opencascade.org进,RESOURCES=>Download): 安装之后目录:《opencascade-7.7.0》文件夹:在环境变量中添加环境变量:DEvEnv......
  • 牛顿迭代法求根
    用牛顿迭代法求根。方程为ax^3+bx^2+cx+d=0,系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根由主函数输出代码如下:#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<math.h>intmain(){ floatsout(floata,floatb,floatc,floatd); ......
  • 牛顿迭代法求方程根
    一、问题描述编写用牛顿迭代法求方程根的函数。方程为ax3+bx2 +cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。牛顿迭代法的公式是: x=xo-f(x0)/f'(x0),设迭代到|x-x0|<=10e-5时结束。二、牛顿迭代公式 三、解题思路1、在......
  • 牛顿迭代法求方程根
    问题描述编写用牛顿迭代法求方程的根。方程ax3+bx2+cx+d=0,系数a,b,c,d由主函数输出。求x在1附近的一个实根,由主函数输出。牛顿的迭代法公式是:x=x0-f(x0)/f’(x0)代码如下#include<stdio.h>#include<math.h>floatfun(doublea,doubleb,doublec,doubled){ floatx0=......
  • 6牛顿迭代法
    #include<stdio.h>#include<math.h>floatsolution(floata,floatb,floatc,floatd){ floatx0,f,fd,h; floatx=1.5; do { x0=x; f=a*x0*x0*x0+b*x0*x0+c*x0+d; fd=3*a*x0*x0+2*b*x0+c; h=f/f......
  • 牛顿迭代法求方程根
    问题描述:编写用牛顿迭代法求方程根的函数。方程为ax三次方+bx平方+cx+d=0,系数a,b,c,d由主函数输入,求x在1附近的一个实根,由主函数输出。完整程序:#include<stdio.h>#include<math.h>main(){floatsolution(floata,floatb,floatc,floatd);floata,b,c,d,xprintf("请输入......