- 积分
- 6
- 注册时间
- 2006-5-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 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
查看全部评分
-
|