找回密码
 注册
Simdroid-非首页
查看: 67|回复: 0

关于Mark Spink的NURBS toolbox曲面一阶法矢计算结果的验证

[复制链接]
发表于 2011-1-17 07:12:46 | 显示全部楼层 |阅读模式 来自 湖北武汉
本帖最后由 clarkyeah 于 2011-1-17 07:18 编辑

        Matlab的几何计算功能是十分弱的,因此网络上会有很多补充的toolbox,一个非常著名的toolbox是Mark Spink提供的NURBS toolbox,用来计算非均匀有理b样条曲线曲面。在使用这个toolbox的时候,我偶然发现其中计算结果和其他途径获得程序计算结果存在不一致的现象,于是作了细致的比较,希望对用matlab做几何建模的朋友有所帮助。
之前有发现Spink 的nurbs toolbox计算曲面一阶切矢量和某五轴加工软件中计算的结果有很明显的差异,但是没仔细探究究竟谁对谁错,而且当时对比的软件在计算一阶法矢的时候采用的数值差分的方法,因此那时仍然认为Spink的结果会准确一些。直到最近开始重新学习NURBS book,还原书上的所有程序。结果发现,即使采用解析公式计算曲面一阶法矢,所得结果仍然与Spink的结果又明显差异,却和泰国人五轴程序相符。
为了彻底弄清孰是孰非,利用UG的VB编程接口,在UG环境下构造B样条曲面,利用UG的曲面分析功能计算曲面一阶法矢,所得结果与某五轴加工软件程序以及NURBS book上解析公式所得结果吻合。

检验细节:
(1)采用测试曲面为Spink给的样例,用如下matlab命令获得参数u=0.5,v=0.7处的两个切矢量:
srf=nrbtestsrf;
dsrf=nrbderiv(srf);
[p,dp]=nrbdeval(srf,dsrf,{0.5,0.7});
其中dp为切矢量,dp两个结果分别为:
6 0 5.71和0, 6.4,5.85
(2)采用UG重新建立曲面模型,vb代码如下:
‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’
Option Strict Off
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Imports NXOpen
Imports NXOpen.Features
Imports NXOpen.Preferences
Imports NXOpen.UF
Module EX_Modl_AskBSurf
Dim theSession As Session
Dim theUfSession As UFSession
Public Sub Main()
theSession = Session.GetSession()
theUfSession = UFSession.GetUFSession()
Dim nError As Integer = Execute(theUfSession)
End Sub
Function Execute(ByVal theUfSession As NXOpen.UF.UFSession) As Integer
Dim knot_fixup, pole_fixup As Integer
Dim bsurf As Tag
Dim bsurf_idata() As Integer = {5, 5, 3, 3}
Dim bsurf_uknot() As Double = {0, 0, 0, 0.33333333333333331, 0.66666666666666663, 1, 1, 1}
Dim bsurf_vknot() As Double = {0, 0, 0, 0.33333333333333331, 0.66666666666666663, 1, 1, 1}
Dim bsurf_poles() As Double = {0, 0, 2, 1, 3, 0, 2, 1, 5, 0, 7, 1, 8, 0, 7, 1, 10, 0, 8, 1, 0, 3, 0, 1, 3, 3, 0, 1, 5, 3, 5, 1, 8, 3, 5, 1, 10, 3, 7, 1, 0, 5, 0, 1, 3, 5, 0, 1, 5, 5, 5, 1, 8, 5, 5, 1, 10, 5, 7, 1, 0, 8, 5, 1, 3, 8, 5, 1, 5, 8, 8, 1, 8, 8, 8, 1, 10, 8, 10, 1, 0, 10, 5, 1, 3, 10, 5, 1, 5, 10, 8, 1, 8, 10, 8, 1, 10, 10, 10, 1}
‘double’] gap_pts
‘double tol = 0.001
‘ Create the b-surface.
theUfSession.Modl.CreateBsurf(bsurf_idata(0), bsurf_idata(1), bsurf_idata(2), bsurf_idata(3), bsurf_uknot, bsurf_vknot, bsurf_poles, bsurf, knot_fixup, pole_fixup)
theUfSession.Modl.Update()
Execute = NXOpen.Session.LibraryUnloadOption.AtTermination
End Function
End Module
‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’
返回结果和NURBS book算法计算结果一致:
7.46, 0, 5.71 和0,9.29,8.74
============================================================
信息列表创建者:     Administrator
日期                           : 2011-1-17 6:13:24
当前工作部件              : C:\temp\_model1.prt
节点名                      : pc-201003062020
============================================================
面的几何属性
信息单元    mm
U 向百分比           =      50.000000000
V 向百分比           =      70.000000000
点在面上             XC =    5.125000000          X =    5.125000000
YC =    6.805000000          Y =    6.805000000
ZC =    6.308750000          Z =    6.308750000
U 向一阶导数         XC =    7.500000000          X =    7.500000000
YC =    0.000000000          Y =    0.000000000
ZC =    5.715000000          Z =    5.715000000
V 向一阶导数         XC =    0.000000000          X =    0.000000000
YC =    9.300000000          Y =    9.300000000
ZC =    8.775000000          Z =    8.775000000
单位面的法向         XC =   -0.484757977          X =   -0.484757977
YC =   -0.600252766          Y =   -0.600252766
ZC =    0.636165325          Z =    0.636165325

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 09:04 , Processed in 0.036490 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表