打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
曲率
userphoto

2023.06.26 辽宁

关注

曲率是曲线和曲面的重要性质,表征了几何的“弯曲程度”。曲率越大,越弯曲;曲率越小,越趋近于直线、平面。直线、平面的曲率为零。

在《曲面网格剖分》中,介绍了,可以通过控制曲面的曲率划分网格。在曲率大的地方,网格密一些;曲率小的地方,网格疏一些。并且在参考1中,4.2.5节中,可以通过控制不同曲率处离散边界的长度而控制离散边与几何的误差。故本文介绍几何曲线、曲面的曲率的求法,以及使用曲率控制网格划分。

1.曲线曲率

曲线曲率定义为:曲线上一点的切线相对于弧长的变化快慢,示意图及计算公式如下,用到曲线的一阶、二阶导数。

曲线曲率需要解决如下几个量的计算:曲率半径(曲率倒数),切线(一阶导数)、法线,密切圆圆心,密切圆所在平面。

法线计算的OCC代码如下,注意此处不可以使用切向量的垂线定义法线,因为空间向量的法向量有无穷多个。

密切圆圆心为,切点沿着法线方向,移动曲率半径的距离。密切圆所在平面为,切向量与法向量所在的平面。

使用OCC提供的,BRepLProp_CLProps类,可以计算曲线的上述信息。以下代码,求一条空间Bezier曲线上的曲率圆。

TopoDS_Edge aEdgeCurve = BRepBuilderAPI_MakeEdge(&bezierFace1);BRepAdaptor_Curve aCurveAda(aEdgeCurve);BRepLProp_CLProps aCurveLocalProp(aCurveAda, 2, 0.00001); //注意此值的取法,不可太大Standard_Real interVal_c = (u1 - u0) / 5;for (int i = 0; i < 6; i++) {aCurveLocalProp.SetParameter(u0 + i * interVal_c);
gp_Pnt center;gp_Dir tanDir;gp_Dir normalDir;aCurveLocalProp.CentreOfCurvature(center);Standard_Boolean f=aCurveLocalProp.IsTangentDefined();aCurveLocalProp.Tangent(tanDir);aCurveLocalProp.Normal(normalDir);//切线法线定义一个平面,曲率圆在这个平面上normalDir.Cross(tanDir);gp_Circ cir(gp_Ax2(center, normalDir), 1 / aCurveLocalProp.Curvature());TopoDS_Edge aEdge = BRepBuilderAPI_MakeEdge(cir);curvatures.push_back(aEdge)}

2. 曲面曲率

曲面第一、第二基本形式,参考《曲面网格剖分》。以下着重介绍曲面曲率的定义及性质。

现在讨论曲率k, 切平面上的向量u,v(任意两个垂直向量)有无数多个。那么曲率k的取值就有无数多个。每个曲率k,对应于切平面上的一个确定向量V(a,b,u,v均取定)。故,每个曲率也对应于切线方向,这也正好是曲率定义,切线方向的变化。所以,我们关注曲率的最大值、最小值--主曲率。下式,曲率取极值,

2.1 曲面上一点的曲率及切平面

曲面上任一点的切平面由其方程对U,V求偏导数,两个切向量组成。如下图所示,我们清楚的展示了主曲率的概念。
gp_Torus aTorus(gp_Ax3(), 8.0,4.0);Geom_ToroidalSurface  torSur(aTorus);TopoDS_Face aTourF = BRepBuilderAPI_MakeFace(aTorus);gp_Vec DirTanV;gp_Vec DirTanU;gp_Vec DirZMain;gp_Pnt p0;torSur.D1(1.0, 1.0, p0, DirTanU, DirTanV);DirZMain = DirTanU;DirZMain.Cross(DirTanV);gp_Pln TPlane(p0, DirZMain); //求切平面//求曲率BRepAdaptor_Surface adaptor(aTourF);GeomLProp_SLProps aProp(adaptor.Surface().Surface(),2,0.000001);aProp.SetParameters(1.0,1.0);
gp_Dir Max; //主曲率方向gp_Dir Min; //主曲率方向Standard_Real maxCurvature=aProp.MaxCurvature();Standard_Real minCurvature = aProp.MinCurvature();aProp.CurvatureDirections(Max, Min);
Geom_Line aMaxVec(p0, Max);Geom_Line aMinVec(p0, Min);//aProp.GaussianCurvature();//aProp.MeanCurvature();

2.2 OCC代码
OCC代码计算曲率,采用了和上式一样的做法。求一阶、二阶导数,求第一、第二基本量参数EFGLMN,解二次方程。以下截图仅展示重要步骤:

2.3 思考

曲面上一点任意方向(任意切线方向)的曲率似乎很难求得。不知是否是,两个主曲率的线性组合,暂未看到肯定说法。由于一点处各个方向的曲率不同,所以造成各向异性。简单来说,就是各个方向的尺寸度量不统一,这也是曲面黎曼度量要解决的问题。

3. 曲率控制网格划分

由于曲面上一点处沿各个方向的曲率不同,故而参数平面网格映射到三维曲面网格时,会出现网格畸变。以下陈述,通过曲率控制容差。

参考书籍一的4.2.5节《Geometry Control》,计算如下。假如取容差为0.01,那么三角形边长不应大于0.282倍的曲率半径。

曲率计算如果采用平均曲率和高斯曲率,不能解决各项异性问题。沿边方向的曲率尝试采用如下方式计算:
将三角形的两条边投影到切平面上,计算边与主曲率方向的夹角。以主曲率值作为坐标轴,计算此方向曲率。示意图如下:

曲率控制的网格实例,后续专门再写一点。

参考:

Finite Element Mesh Generation
OCC Online Documentation
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VR/AR背后的弄潮儿(1):微分几何之逼近理论
曲面网格剖分
高等数学知识的动画解析:《图解高等数学 - 下》 1~15合集
怎样描述曲面的弯特征?
从线到面——绘制草图轻松构建三维模型
曲面分析中的斑马纹有什么用?如何评价曲面质量?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服