首先,这里是我正在寻找的 – 一个物体,行驶一定秒钟,击中一个位置,并立即放缓到一定数量的秒钟,在同一个地方应用阻尼.所以为了可视化这一点,假设我有一个600w / 900h的画布,我有一个正方形,在一个Translatetransform.Y中开始从900px到150px的动画.达到150px高度(187.5px每秒)需要4秒钟,在这个阶段,它立即被阻挡,只有0.4秒(87.5像素每秒),大约35像素,高达115像素,然后反d1秒至163像素高(每秒48像素和48像素),然后反d回146px(每秒17像素和17像素),等等,直到光线减慢到最终的150px的休息位置.停留时间为16秒.
上面我描述的例子是左上角的蓝色矩形:
这是我将提前知道的 – 从点A到点B所需的像素距离和秒数,用于点动的秒数.像群众一样似乎并不重要.
我已经尝试过ElasticEase,这个问题似乎是我不能让对象旅行,没有放松4秒,然后“反d”在接下来的16秒.即使我把它设置为一个非常高的数字,也就是20,这样一来,春天也总是太多了.
ILSpy的功能如下:
protected overrIDe double EaseInCore(double normalizedTime) { double num = Math.Max(0.0,(double)this.Oscillations); double num2 = Math.Max(0.0,this.Springiness); double num3; if (Doubleutil.IsZero(num2)) { num3 = normalizedTime; } else { num3 = (Math.Exp(num2 * normalizedTime) - 1.0) / (Math.Exp(num2) - 1.0); } return num3 * Math.Sin((6.2831853071795862 * num + 1.5707963267948966) * normalizedTime); }@H_502_22@我已经在DropBox的压缩文件夹中添加了2个视频和一个Excel文件.我想这个问题将更多的是正在进行中的工作,因为人们问更多的澄清问题.
(免责声明:我不知道在谈论这些东西时我在说什么)
解决方法 跳过物理学,直接去等式.参数:
“这是我将提前知道的 – 从A点到B点所需的像素距离[D]和秒数[T0],振荡的秒数[T1]”.另外,我将添加作为自由参数:振荡的最大大小,Amax,阻尼时间常数Tc和帧速率Rf,即什么时候想要一个新的位置值.我假设你不想计算这个永远,所以我只会做10秒,Ttotal,但有各种合理的停止条件…码:
这是代码(在Python中).主要的是方程,在def Y(t)中找到:from numpy import pi,arange,sin,expYstart,D = 900.,900.-150. # all time units in seconds,distance in pixels,Rf in frames/secondT0,T1,Tc,Rf,Ttotal = 5.,2.,90.,30.,10. A0 = Amax*(D/T0)*(4./(900-150)) # basically a momentum... scales the size of the oscillation with the speed def Y(t): if t<T0: # linear part y = Ystart-(D/T0)*t else: # decaying oscillations y = Ystart-D-A0*sin((2*pi/T1)*(t-T0))*exp(-abs(T0-t)/Tc) return yy_result = []for t in arange(0,1./Rf): # or one Could do "for i in range(int(Ttotal*Rf))" to stick with ints y = Y(t) y_result.append(y)@H_502_22@这个想法是线性运动直到点,随后是衰减振荡.振荡由sin和衰减由乘以exp提供.当然,更改参数以获得所需的任何距离,振荡大小等.
笔记:
>评论中的大多数人都在建议物理方法.我没有使用这些,因为如果一个指定一个动作,它有点过分 – 从物理开始,去微分方程,然后计算运动,并调整参数以获得最后的事情.也可以直接到最后的事情.除非那就是他们想要从事的物理学的直觉.
通常在这样的问题上,想要保持连续的速度(一级派生),但你说“立即放慢”,所以我没有这样做.
>请注意,当应用阻尼时,振荡的周期和幅度将不会完全如同规定的那样,但这可能比您更关心的更详细.
>如果您需要将其表示为单一方程式,则可以使用“HeavisIDe函数”来打开和关闭贡献.有可能造成这么长时间,我意识到我可以在GIMP中做一个gif,所以这就是它的样子:
如果有兴趣,我可以发布完整的代码来创建这些图,但是基本上我只是为每个时间步长调用具有不同D和T0值的Y.如果我再次这样做,我可以增加阻尼(即降低Tc),但这有点麻烦,所以我要离开它.
总结以上是内存溢出为你收集整理的wpf – d簧质量系统的阻尼效应(或这种d性优化?)全部内容,希望文章能够帮你解决wpf – d簧质量系统的阻尼效应(或这种d性优化?)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)