00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <lib3ds/ease.h>
00023
00024
00033 Lib3dsFloat
00034 lib3ds_ease(Lib3dsFloat fp, Lib3dsFloat fc, Lib3dsFloat fn,
00035 Lib3dsFloat ease_from, Lib3dsFloat ease_to)
00036 {
00037 Lib3dsDouble s,step;
00038 Lib3dsDouble tofrom;
00039 Lib3dsDouble a;
00040
00041 s=step=(Lib3dsFloat)(fc-fp)/(fn-fp);
00042 tofrom=ease_to+ease_from;
00043 if (tofrom!=0.0) {
00044 if (tofrom>1.0) {
00045 ease_to=(Lib3dsFloat)(ease_to/tofrom);
00046 ease_from=(Lib3dsFloat)(ease_from/tofrom);
00047 }
00048 a=1.0/(2.0-(ease_to+ease_from));
00049
00050 if (step<ease_from) s=a/ease_from*step*step;
00051 else {
00052 if ((1.0-ease_to)<=step) {
00053 step=1.0-step;
00054 s=1.0-a/ease_to*step*step;
00055 }
00056 else {
00057 s=((2.0*step)-ease_from)*a;
00058 }
00059 }
00060 }
00061 return((Lib3dsFloat)s);
00062 }