iCAx开思工具箱

标题: 如何根据曲线函数y=f(x),将曲线画出来,在UG中应调用哪个函数 [打印本页]

作者: kingwars    时间: 2005-6-27 10:50
标题: 如何根据曲线函数y=f(x),将曲线画出来,在UG中应调用哪个函数
已知离散点数据,想做最小二乘曲线的拟合,拟合算法都是很标准的,可以自己编出来,但是这样做只能求到曲线的函数关系式,如何根据函数关系式画函数呀,请指点。
作者: 深夜摔键盘    时间: 2005-6-27 21:17
CAD软件里的曲线,不是y=f(x)的形式。y=f(x)只能画平面曲线。空间曲线现在的CAD中多用B样条曲线。如果你的数据分布的不复杂,可以采用 BEZIER曲线来拟和。
  
现在的数值分析教材,在内容上有点陈旧了,大多不讲参数多项式曲线的拟合。所以你要画线,得找找NURBS曲线的书来看。
  
UG里有拟合数据点的功能吧,有点奇怪你为啥要自己去拟合。
作者: kingwars    时间: 2005-6-28 09:43
深夜摔键盘:非常谢谢你,我知道UG里面有曲线拟合功能,调用的函数是UF_MODL_create_fitted_spline(SPLINE_FIT_p_t spline_data,double *max_err,int *max_err_pt ,tag_p_t obj_id)这里面有个参数spline_data的数据结构我不知是什么意思,帮助文档里面也没有介绍,struct SPLINE_FIT_s{ double *points,*slope,*weights,tolerance;int num_of_points,slope_flag,num_of_weights,*weight_poisitions,num_of_segment,degree;}所以你能否帮我介绍一下,这个结构的成员如何设置。
还有,你说在UG 里面,若给定平面曲线函数y=f(x),可以画出曲线,请问在UG里面调用哪个库函数。因为如何我自己编拟合算法的话,得到的 结果是f(x)=a0+a1*x+a2*x*x+a3*x*x*x的形式,所以就要用到这个函数。
我的qq是29581179,如果愿意的话,可以现场指导。呵呵
作者: 深夜摔键盘    时间: 2005-6-29 11:35
f(x)=a0+a1*x+a2*x*x+a3*x*x*x, 这种曲线类型UG是不支持的。
  
同样是曲线,但表达方式有很多种,后来NURBS能表示所有的曲线形状,它就CAD的标准。
  
譬如C(u)=B0+B1u+B2u^2+....+Bnu^n这样的曲线;
u是参数,C(u)是对应参数u的一个向量,可以是n维向量。这是Bezier的曲线形式。B样条曲线要比这更复杂。
  
SPLINE_FIT_p_t,我也不清楚,B样条现在我还没有开始学习,只懂一点bezier曲线曲面。所以没有办法帮你啊。
  
/* Define the data structure used by UF_MODL_create_fitted_spline().  
   For "By Tolerance" method, you need to at least specify 'degree', 'num_of_points',
   'points', 'tolerance' and 'num_of_segments'(must be zero).
   For "By Segments" method, you need to at least specify 'degree', 'num_of_points',
   'points', and 'num_of_segments'.
   The "By Template" method is not supported at this moment.
  */
struct  SPLINE_FIT_s
{
  double  *points;           /* coordinates for the points to be fitted.  
                                points[0~2] = (x, y, z) for the 1st point,
                                points[3~5] = (x, y, z) for the 2nd point,
                                ...
           */
  double  *slopes;           /* The slope values.
                                slopes[0~2] = start slope when slope_flag = 1 or 3
                                              end slope when slope_flag = 2,
                                slopes[3~5] = end slope when slope_flag = 3.
                             */
  double  *weights;          /* values for user-defined weights. Only positive values are allowed */
  double  tolerance;         /* Tolerance value for the "By Tolerance" method.  
                                This value will be ignored when the 'num_of_segments' is  
                                positive  */
     
  int     num_of_points;     /* Number of points to be fitted */
  int     slope_flag;        /* 0=no slopes, 1=only start slope exists,
                                2=only end slope exists, 3=both end slopes exist */
  int     num_of_weights;    /* Number of user-defined weights */
  int     *weight_positions; /* The index of points (from 1 ~ num_of_points) for the user-defined  
                                weights to apply to */
  int     num_of_segments;   /* Number of segments for the "By Segments" method.  
                                Must be set to 0 for "By Tolerance" method. */
  int     degree;            /* The desired degree for the fitted spline        */
};
作者: morpheus_1982    时间: 2009-4-20 19:38
太专业了。漫天的星星,这位大哥,你到底是程序员,工程师,还是数学家?




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3