UG爱好者
标题: Step函数曲线方程浅析 [打印本页]
作者: muoubear* 时间: 2020-11-2 20:26
标题: Step函数曲线方程浅析
本帖最后由 muoubear* 于 2020-11-2 21:50 编辑
官方帮助文档关于STEP函数的表述如图1所示:
图1 STEP函数表述
官方将STEP函数称之为三阶混合函数,图1中对于STEP函数的表述译文如下:
STEP(u, xmin, ymin, xmax, ymax)
其中:
u<xmin,Step=ymin
u>xmax,Step=ymax
xmin<u<xmax, Step函数返回三阶函数值,使该点位于(xmin,ymin)和(xmax,ymax)两点之间,三阶函数在xmin和xmax处的斜率为0。
为了和软件中STEP函数的参数字符对应,并方便讲解,使用下面的表述:
y =STEP(x, x0, h0, x1, h1)
其中
x,时间变量,取值范围[0,t],t为解算方案中的时间。
x0,[0, t]时间区间上某个时间点;
h0,x<x0,Step=h0;
x1,[0, t]时间区间的另一个时间点;
h1,x>x1,Step=h1;;
(x0,h0)和(x1,h1)两点之间为三次函数值,三次函数在两点处的斜率为0。
从图1可以看出STEP函数的曲线可以分为3部分:
当 x<x0时,y1=h0,y1为一段水平直线
x0<x<x1时,y2=?y2为一段拟合曲线,拟合曲线两端分别相切于两段水平直线
x>x1时,y3=h1,y3为一段水平直线
这里我们并不知道拟合曲线的方程,图1资料仅指出该曲线为三阶函数曲线,这里我们先假设该曲线为二阶函数曲线,并将两点间的拟合曲线拆分成两部分,用一元二次方程顶点式分别表示这两段曲线的方程,表述如下:
y1 =h0,x∈[0, x0],y1为一段水平直线;
y2 = a*(x-x0)^2+h0,x∈[x0,x1],y2为一段开口向上的二次曲线,与y1相切于最低点(x0,h0),与y3相切于点((x0+x1)/2,(h0+h1)/2);
y3 =-a*(x-x1)^2+h1,x∈[x0,x1],y3为一段开口向下的二次曲线,与y3相切于最高点(x1,h1),与y2相切于点((x0+x1)/2,(h0+h1)/2);
y4 =h1,x∈[x1, t],y4为一段水平直线。
以上y1和y2曲线方程确定,y3和y4两段二次曲线方程系数a待求,两曲线形状完全相同,y4相当于y3绕点((x0+x1)/2,(h0+h1)/2)旋转了180度。
将已知点((x0+x1)/2,(h0+h1)/2)代入到y2,y3中,则
可得 a= 2*(h1-h0)/(x1-x0)^2
将a的值代入到y2,y3方程,则
可得 y2= 2*(h1-h0)/(x1-x0)^2 * (x-x0)^2+h0,x∈[x0,(x0+x1)/2]
y3=-2*(h1-h0)/(x1-x0)^2 * (x-x1)^2+h1,x∈[(x0+x1)/2,x1]
所以整段曲线的方程可表示为:
y=h0,x∈[0, x0]
•2*(h1-h0)/(x1-x0)^2 * (x-x0)^2+h0,x∈[x0,(x0+x1)/2]
•-2*(h1-h0)/(x1-x0)^2 * (x-x1)^2+h1,x∈[(x0+x1)/2,x1]
•h1,x∈[x1, t]
参考上述二次曲线的做法,我们也用方程顶点式分别表示这两段三次曲线的方程,表述如下:
y1 =h0,x∈[0, x0],y1为一段水平直线;
y2 =a*(x-x0)^3+h0,x∈[x0,x1],y2为三次曲线的凹曲线部分,与y1相切于最低点(x0,h0),与y3相切于点((x0+x1)/2,(h0+h1)/2);
y3 =a*(x-x1)^3+h1,x∈[x0,x1],y3为三次曲线的凸曲线部分,与y3相切于最高点(x1,h1),与y2相切于点((x0+x1)/2,(h0+h1)/2);
y4 =h1,x∈[x1, t],y4为一段水平直线。
以上y1和y2曲线方程确定,y3和y4两段三次曲线方程系数a待求,两曲线形状完全相同,y4相当于y3绕点((x0+x1)/2,(h0+h1)/2)旋转了180度。
将已知点((x0+x1)/2,(h0+h1)/2)代入到y2,y3中,则
得 a= 4*(h1-h0)/(x1-x0)^3
将a的值代入到y2,y3方程,则
y2= 4*(h1-h0)/(x1-x0)^3 * (x-x0)^3+h0,x∈[x0,(x0+x1)/2]
y3= 4*(h1-h0)/(x1-x0)^3 * (x-x1)^3+h1,x∈[(x0+x1)/2,x1]
所以整段曲线的方程可表示为:
y=h0,x∈[0, x0]
•4*(h1-h0)/(x1-x0)^3 * (x-x0)^3+h0,x∈[x0,(x0+x1)/2]
•4*(h1-h0)/(x1-x0)^3 * (x-x1)^3+h1),x∈[(x0+x1)/2,x1]
•h1,x∈[x1, t]
官方帮助没有给出STEP函数(x0,h0)和(x1,h1)两点之间的曲线方程,以上关于STEP曲线方程纯属推测,下面我们在软件中进行验证。
在草图中绘制一个边长为100的正方形,正方形左下角再绘制一个直径为5的圆,如图2所示。
图2 绘制草图
选择这个圆作为连杆,选该连杆进行驱动,x方向使用多项式驱动,速度为10,y方向使用函数驱动,其STEP函数表示为:
STEP(x, 1, 10, 9, 90),表示前1s时,y=10,9s后,y=90,两点间则为三次混合曲线。
对圆心创建标记并追踪,可以得到该函数的曲线轨迹,如图3所示。
图3 STEP函数曲线轨迹
作者: muoubear* 时间: 2020-11-2 20:40
首先验证我们二次曲线方程,我们使用IF函数驱动,曲线的IF函数表示为:
IF(x<x0, h0, IF( x<(x0+x1)/2, 2*(h1-h0)/(x1-x0)^2 * (x-x0)^2+h0,IF( x<x1, -2*(h1-h0)/(x1-x0)^2 * (x-x1)^2+h1, h1)))
重新求解,可发现二次拟合曲线的追踪点轨迹和STEP函数的轨迹不一致,如图4所示。
图4 二次函数拟合曲线轨迹
再验证三次曲线方程,使用IF函数驱动,曲线的IF函数表示为:
IF(x<x0, h0, IF( x<(x0+x1)/2, 4*(h1-h0)/(x1-x0)^3 * (x-x0)^3+h0,IF( x<x1, 4*(h1-h0)/(x1-x0)^3 * (x-x1)^3+h1, h1)))
重新求解,可发现三次拟合曲线的追踪点轨迹和STEP函数的轨迹仍不一致,如图5所示。
图5 三次函数拟合曲线轨迹
部分书籍和教程上有给出STEP函数的方程,其表示如下:
y= h0 ,x∈[0, x0] h0+((x-x0)/(x1-x0))^2*(h1-h0),x∈[x0, x1] h1,x∈[x1, t]
验证上述方程,使用IF函数驱动,曲线的IF函数表示为:
IF(x<x0, h0, IF( x<x1, h0+((x-x0)/(x1-x0))^2*(h1-h0),h1))
重新求解,可发现上述拟合曲线的追踪点和STEP函数轨迹不符,是一条方向向上的二次曲线,曲线仅在最低点(x0,h0)处和第一段水平线相切,如图6所示。
图6 其他二次方程拟合曲线轨迹
总结:根据上面分析可以看出,STEP函数拟合段的曲线方程并非上述这些方程,以上关于STEP函数拟合曲线的分析为个人观点,仅供参考。
STEP函数官方在线文档链接:https://docs.plm.automation.siemens.com/data_services/resources/nx/12/nx_help/common/zh_CN/graphics/fileLibrary/nx/tdoc_motion/simcenter_motion_expressions.pdf
作者: 如云得龙 时间: 2021-10-15 15:01
佩服。
作者: 清源妙道真君 时间: 2021-10-28 14:20
讲的太好了。最近学运动仿真,网上搜到的STEP函数都是如何运用,学到的也是一知半解。经过楼主这么讲解,对STEP函数的认识加深了一层
欢迎光临 UG爱好者 (https://www.ugsnx.com/) |
Powered by Discuz! X3.2 |