Sunday, February 15, 2009

运动曲线研究(缓动效果) 转

运动曲线研究(缓动效果)
作者:金大为 来源:general.blogjava.net  发布时间:2007-10-14 22:24:06.267

刚刚学习了一下网页动画中上的缓动效果,分享一下学习心得。

缓动曲线的概念:

缓动曲线是一个0为起点的连续函数曲线,x轴表示时间变化,y轴表示位移变化。曲线的斜率反映出运动的数度。

缓动效果在Flash动画中比较常见,用于模拟一些现实中常见的运动轨迹,或者制造一些超绚的效果。
而且新版本的Flash中,内置了一些常用的缓动曲线函数。

可惜,Flash的这些曲线函数不是开源的,我们不知道内部如何实现,也就无法将其移植到JS中。感受其绚丽的同时,未免有一丝遗憾。

于是乎,自己琢磨琢磨。

首先,我对Flash的渐变函数接口非常不满。
搞那么多参数干吗?
要描述一个区间的渐变运动特征,只需一个y = f(x)足已。那么一大堆参数,真够罗嗦。
//原理:我们以终点位移为参考,只需要知道中间个点相对于最终位移,我们就能确定运动的规律。
y= f(x)
//约定
//x ∈ [0,1] #将x变化换算成[0,1]是最简单不过的操作
//f(0) = 0 #运动是连续的嘛^_^.
//f(1) != 0 #如果f(1) = 0了,那不就没有运动嘛,中间即使有位移,我也无法计算中间的位移相对于总体位移的比例。

曲线转换
每种类型的渐变都有三种变形

渐入(in)

在过渡的开始提供缓动效果。

渐出(out)

在过渡的结尾提供缓动效果。

渐入渐出(inOut/Both)

在过渡的开始和结尾提供缓动效果。


其中,我们只要知道一个的曲线,其他两个都可以转换生成:
知道渐入曲线之后,将其相对于(0.5,0.5)点绘制镜像,就是一个缓出运动,分段叠加就是一个完整的缓入缓出运动。



首先,常见的加速/减速运动:
初中物理就能搞定。
加速渐变函数为(easeIn):
y=x*x; //y轴比例常数无需考虑

这是一个简单的2次曲线,表现一个渐入运动。
简单的变换一下:y = 1-(1-x)*(1-x) 减速运动(easeOut)
复杂一点:
y = x>0.5? 1-2(1-x)*(1-x) :
2*x*x :
先加速后减速运动(easeBoth)




既然有二次曲线,很自然就想到三次、四次曲线。是的,这些曲线都有类似特征,区别在中间更陡峭,两头平缓(缓入缓出)

接下来,我就想实现一下弹动效果:

这类效果就好像一个甲虫飞到蜘蛛网上,在网上抖动两下,静下来听天由命。
抖动,周期运动,好,我们很快就想到正弦曲线。
方法基本正确,不过我起初还是走弯路了,我自作聪明的想着延长开始的半周期(x轴边形处理,振动让周期先大后小)。
但最终发现效果非常不理想,最后查看yui的实现。模仿一下,走出了这个误区。
我们通常看到的振荡移位效果,都是开始移动了较长位移,给人一种开始的振动周期更长的错觉,振动周期是不需要变化的。
纠正这个错误后,实现曲线函数如下:

y = Math.pow(1024,x-1)*Math.sin(x*((2*(period||1)+0.5)*Math.PI));

利用指数函数的第二象限的渐变特征变形,取处理正弦波形的振幅,达到一个衰减的效果。



趁热打铁,看看yui的其他几类渐变效果:

回退起步效果。
喜欢看动画片的话,你一定记得这个常见的场面,当一个家伙想快跑的时候,一点要先回撤一段距离,能后如突然加速前进。ok要的就是这个效果。
实现其实也很简单,一个二次曲线就可以搞定

y = x*(x-(backDistance||0.1)*4)



撞墙效果

这个名字可能不太合适吧,应该叫撞地效果更合适,鉴于撞墙这个名词更常见一些,也就标题党一回好了:)
玩过弹球吧,弹球的运动规律一定还记得。
对就是这种轨迹。
运功轨迹就是若干条二次曲线的分段拼接。改写一个yui里面的模拟实现。

this.bounceOut = function (x) {
if (x < (1/2.75)) {
return x*x;
} else if (x < (2/2.75)) {
return (x-=(1.5/2.75))*x + .75/7.5625;
} else if (x < (2.5/2.75)) {
return (x-=(2.25/2.75))*x + .9375/7.5625;
}
return (x-=(2.625/2.75))*x + .984375/7.5625;
};
这里手动指出了一大堆参数,其实,这些参数都可以通过计算得出,偷个懒,就这么地吧,^_^

Tuesday, February 3, 2009

胃胀气

胃胀气
1、发病机理与病因

引起胃胀的原因有多方面的,如精神压力、消化不良等,主要是胃动力不足。

2、临床症状与危害

一般是饭后饱胀,嗳气,坐卧不安,茶饭不思;
胃胀的反复性和长期性可以导致胃炎,消化道溃疡,甚至可以发展为胃癌。

3、常用药的危害

医药治疗主要加强胃动力,但是长期服用会造成人体的依赖性;
由于药物是化学合成,对人体存在着副作用。

4、日常生活以及饮食的注意事项

避免摄食刺激性和对身体敏感的食物;饮食规律,细嚼慢咽,戒烟少酒;情绪稳定,放松精神,适量运动,劳逸结合。

5、营养产品调理建议

■维生素 C:具有抗氧化,解毒的功效,减轻精神压力;促进胶原蛋白的合成,增强胃动力。
■维生素 B族:促进消化,加速人体的新陈代谢;稳定情绪,减轻精神压力,改善睡眠。
■复合维生素片:补充人体所需的维生素和矿物质,促进消化,加速人体的新陈代谢;加速修复受损的组织;稳定情绪,减轻精神压力。

6、建议服用方法

■急需营养重点补充,按标签注量的 3倍服用,直到有关症状缓解为止:维生素C,维生素B族
■正常需要基本营养补充,按标签注量服用:复合维生素片



附:
胀气可能是胃、肠道出毛病的一个症状,张开嘴巴咀嚼、边吃边说话、狼吞虎咽(同时吃进许多空气)、边吃饭边喝汤(将胃中的消化酶冲下消化道)等, 都容易造成消化问题带来胀气。消化不良、胃病也会伴随胀气;食物过敏也可能是造成原因,它使食物在结肠发酵,产生氢气及二氧化碳;糖类食品含有细菌,是产 生胀气的主要来源。你需找出自己无法消化的食物,进而避开这些食物。生活压力、情绪紧张、缺乏消化酶等,均可能引起胀气。

家庭治疗措施
●服用嗜酸菌
消化不良型胀气可用嗜酸菌来改善,因为缺乏这些良性菌是最常见的消化不良因素。打开10粒胶囊服用,或使用一汤匙的粉末配方。对乳晶过敏者,可改用不含牛乳的制剂。嗜酸菌也是颇安全的灌肠剂,开始你可能感到轻微的不适,不过大约1小时后即可乎息。
●不直搭配的食物
食物搭配不良会带来消化问题,例如蛋白质与淀粉就不是好搭档,蔬菜与水果也是不佳的组合,牛奶不宜与三餐同时用,糖不要与蛋白质或淀粉合用。
●喝醋
用一汤匙纯的苹果醋加一杯水,在正餐时啜饮,有助消化。也可以早晨起床时先喝一杯柠檬水,它也有治疗及清血的作用。
●嚼米汤
米汤及大麦粥对胀气、排气及胃灼热等毛病有效。用5份的水加一份的米(谷子或大麦),煮沸10分钟。盖上锅盖再慢炖50分钟。过滤,冷却后,一天喝数次。
●应避免的食物
胀气的主要原因是消化系统无法吸收某类碳水化合物,豆类容易引起胀气,甘蓝菜、绿花椰菜、洋葱、白花椰菜、全麦面粉、白萝卜、香蕉等也容易产生胀气。
●遁量摄取高纤维食品
虽然高纤维食品有利于健康,但有些高纤维的蔬菜和水果可能会增加排气。如果你想在饮食中增加纤维用量以维持健康,应从少量开始,使肠子逐渐适应,这样可以减少胀气。
●服木炭片
活性炭能有效地排除过多的气体,在你感到不适时,立即服用5粒。但你若正服用其他药物,则需注意,木炭粒除了吸收气体,也会吸收药物成分。同时,切勿每天使用,因为木炭的吸收力强,能吸收有用的营养索。
●药物的选择
胃部胀气可用胰脏酵素;肠子胀气可用微量矿物质;制酸剂对排气及胀气均无效。当气体产生过多,可用新鲜柠檬榨成汁加1.14升的温水,当作灌肠剂,以平衡体内的PH值。如果体内排气仍持续数日,可用双叉乳杆菌灌肠剂,它可在数小时内解除问题。
●少吃乳品
如果你有乳糖不耐症,则当你吃乳品时,可能产生胀气问题。有乳糖不耐症的人,其肠内的乳糖酶不足,无法充分消化乳品中的乳糖。有些人只能接受限量及某类乳制品。如果你的医师怀疑你最爱的乳品是问题的来源,应减少用量,看看胀气的情形如何。
●细嚼慢咽
吃饭时应细嚼慢咽,不要张开嘴巴咀嚼或边吃边说话,边吃饭边喝汤,它们均容易造成消化问题带来胀气。
●怎样熏豆子
如果你喜欢吃豆子,又不希望胀气,这里教你一个解决办法。豆类在水中似乎会流失大部分产生气体的物质。研究显示,浸泡豆子12小时,或用湿纸巾覆盖24小时,可以大幅度地降低产生气体的化合物含量。用压力锅煮后,再浸泡30分钟,更可以减少90%的此类化合物。
其他疗法
●使用胰脏醇康
如果你曾经作过腹腔手术(例如,切除一段肠子),使用胰脏酵素将有助于消化食物。低血糖症患者也需要胰脏酵索。用餐毕,若感到饱胀、肚内有咕噜声、胀气或排气等,也可服用胰脏酵素。
●作运动
运动有利于肠胃的蠕动,有助于排除胀气,你可以快步行走和做操。
●过敏症测试
作一个过敏症自我测试,看看你对那些食物过敏。