rag
graphic 2d engine
Ease.h
1 /* Title: Ease equations library.
2 
3  Based on previous work by Robert Penner, Jesus Gollonet and Tomas Cepeda.
4 
5  Please check readme for licensing and other conditions.
6 
7  //#warning complete with http://snippets.dzone.com/posts/show/4005
8  //#warning complete with http://www.gizma.com/easing/#quint3
9  //#warning complete with http://giancarlo.dimassa.net/2007/07/11/elastic-and-bouncing-transitions-in-scriptaculous/
10  //#warning complete with http://www.reflektions.com/miniml/template_archives_cat.asp?cat=17
11 
12  History:
13 
14  v1.0 - (13-Oct-08) Initial version
15 
16 
17  Visualizations:
18 
19  // linear_01
20  // +1 | - - - - - - - - - - - - - - - - - - - - *******+ -
21  // | ******* |
22  // | ***+*** |
23  // | ******** | |
24  // | *+***** | |
25  // | ******* | | |
26  // | ******* | | |
27  //d | ******+* | | |
28  //e | ******* |0.25 |0.50 |0.75 |1.00
29  //l 0-+***-------------+----------------+----------------+-----------------+----
30  //t | PI/2 PI 3PI/4 2PI
31  //a |
32  // |
33  // |
34  // |
35  // |
36  // |
37  // |
38  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
39  // | time
40 
41  // quadIn_01
42  // +1 | - - - - - - - - - - - - - - - - - - - - - ***+ -
43  // | **** |
44  // | **** |
45  // | ***** |
46  // | ***+* |
47  // | ****** | |
48  // | ****** | |
49  //d | ******+* | |
50  //e | *+********** |0.50 |0.75 |1.00
51  //l 0-+***************-+----------------+----------------+-----------------+----
52  //t | PI/2 PI 3PI/4 2PI
53  //a |
54  // |
55  // |
56  // |
57  // |
58  // |
59  // |
60  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
61  // | time
62 
63  // quadOut_01
64  // +1 | - - - - - - - - - - - - - - - ****+*****************+ -
65  // | ********* | |
66  // | ***+*** | |
67  // | ****** | | |
68  // | ****** | | |
69  // | **+* | | |
70  // | ***** | | | |
71  //d | **** | | | |
72  //e | **** |0.25 |0.50 |0.75 |1.00
73  //l 0-+*---------------+----------------+----------------+-----------------+----
74  //t | PI/2 PI 3PI/4 2PI
75  //a |
76  // |
77  // |
78  // |
79  // |
80  // |
81  // |
82  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
83  // | time
84 
85  // quadInOut_01
86  // +1 | - - - - - - - - - - - - - - - - - ***************+ -
87  // | ****+** |
88  // | ***** | |
89  // | **** | |
90  // | +*** | |
91  // | ****| | |
92  // | **** | | |
93  //d | ****** | | |
94  //e | *****+**25 |0.50 |0.75 |1.00
95  //l 0-+***********-----+----------------+----------------+-----------------+----
96  //t | PI/2 PI 3PI/4 2PI
97  //a |
98  // |
99  // |
100  // |
101  // |
102  // |
103  // |
104  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
105  // | time
106 
107  // cubicIn_01
108  // +1 | - - - - - - - - - - - - - - - - - - - - - -**+ -
109  // | *** |
110  // | *** |
111  // | *** |
112  // | **** |
113  // | *+** |
114  // | ***** | |
115  //d | ******* | |
116  //e | 0.25 ********+***0 |0.75 |1.00
117  //l 0-+****************+********--------+----------------+-----------------+----
118  //t | PI/2 PI 3PI/4 2PI
119  //a |
120  // |
121  // |
122  // |
123  // |
124  // |
125  // |
126  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
127  // | time
128 
129  // cubicOut_01
130  // +1 | - - - - - - - - - - - -**************+*****************+ -
131  // | ******+** | |
132  // | ***** | | |
133  // | ***** | | |
134  // | ***+ | | |
135  // | **** | | | |
136  // | *** | | | |
137  //d | *** | | | |
138  //e | ** |0.25 |0.50 |0.75 |1.00
139  //l 0-+*---------------+----------------+----------------+-----------------+----
140  //t | PI/2 PI 3PI/4 2PI
141  //a |
142  // |
143  // |
144  // |
145  // |
146  // |
147  // |
148  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
149  // | time
150 
151  // cubicInOut_01
152  // +1 | - - - - - - - - - - - - - - - -**+*****************+ -
153  // | ***** | |
154  // | **** | |
155  // | *** | |
156  // | +** | |
157  // | **| | |
158  // | **** | | |
159  //d | **** | | |
160  //e | +****** |0.50 |0.75 |1.00
161  //l 0-+****************+----------------+----------------+-----------------+----
162  //t | PI/2 PI 3PI/4 2PI
163  //a |
164  // |
165  // |
166  // |
167  // |
168  // |
169  // |
170  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
171  // | time
172 
173  // quartIn_01
174  // +1 | - - - - - - - - - - - - - - - - - - - - - - *+ -
175  // | ** |
176  // | *** |
177  // | ** |
178  // | *** |
179  // | **** |
180  // | *+** |
181  //d | ****** | |
182  //e | 0.25 +********* |0.75 |1.00
183  //l 0-+****************+****************+----------------+-----------------+----
184  //t | PI/2 PI 3PI/4 2PI
185  //a |
186  // |
187  // |
188  // |
189  // |
190  // |
191  // |
192  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
193  // | time
194 
195  // quartOut_01
196  // +1 | - - - - - - - - - ****+****************+*****************+ -
197  // | ******* | | |
198  // | ***** | | |
199  // | ***+ | | |
200  // | *** | | | |
201  // | *** | | | |
202  // | ** | | | |
203  //d | *** | | | |
204  //e |** |0.25 |0.50 |0.75 |1.00
205  //l 0-+----------------+----------------+----------------+-----------------+----
206  //t | PI/2 PI 3PI/4 2PI
207  //a |
208  // |
209  // |
210  // |
211  // |
212  // |
213  // |
214  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
215  // | time
216 
217  // quartInOut_01
218  // +1 | - - - - - - - - - - - - - - -*****+*****************+ -
219  // | **** | |
220  // | *** | |
221  // | *** | |
222  // | * | |
223  // | **+ | |
224  // | ** | | |
225  //d | **** | | |
226  //e | 0.****** |0.50 |0.75 |1.00
227  //l 0-+****************+**--------------+----------------+-----------------+----
228  //t | PI/2 PI 3PI/4 2PI
229  //a |
230  // |
231  // |
232  // |
233  // |
234  // |
235  // |
236  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
237  // | time
238 
239  // quintIn_01
240  // +1 | - - - - - - - - - - - - - - - - - - - - - - *+ -
241  // | ** |
242  // | ** |
243  // | ** |
244  // | ** |
245  // | *** |
246  // | **** |
247  //d | ***+* |
248  //e | 0.25 0.50********* |0.75 |1.00
249  //l 0-+****************+****************+****------------+-----------------+----
250  //t | PI/2 PI 3PI/4 2PI
251  //a |
252  // |
253  // |
254  // |
255  // |
256  // |
257  // |
258  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
259  // | time
260 
261  // quintOut_01
262  // +1 | - - - - - - - - ********+****************+*****************+ -
263  // | ******* | | |
264  // | **+* | | |
265  // | **** | | | |
266  // | ** | | | |
267  // | ** | | | |
268  // | ** | | | |
269  //d | ** | | | |
270  //e |** |0.25 |0.50 |0.75 |1.00
271  //l 0-+----------------+----------------+----------------+-----------------+----
272  //t | PI/2 PI 3PI/4 2PI
273  //a |
274  // |
275  // |
276  // |
277  // |
278  // |
279  // |
280  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
281  // | time
282 
283  // quintInOut_01
284  // +1 | - - - - - - - - - - - - - - *******+*****************+ -
285  // | **** | |
286  // | ** | |
287  // | ** | |
288  // | * | |
289  // | *+ | |
290  // | ** | | |
291  //d | *** | | |
292  //e | 0.25****** |0.50 |0.75 |1.00
293  //l 0-+****************+****------------+----------------+-----------------+----
294  //t | PI/2 PI 3PI/4 2PI
295  //a |
296  // |
297  // |
298  // |
299  // |
300  // |
301  // |
302  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
303  // | time
304 
305  // expoIn_01
306  // +1 | - - - - - - - - - - - - - - - - - - - - - - *+ -
307  // | * |
308  // | * |
309  // | ** |
310  // | ** |
311  // | ** |
312  // | **** |
313  //d | +**** |
314  //e | 0.25 0.50 ***********|0.75 |1.00
315  //l 0-+****************+****************+*****-----------+-----------------+----
316  //t | PI/2 PI 3PI/4 2PI
317  //a |
318  // |
319  // |
320  // |
321  // |
322  // |
323  // |
324  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
325  // | time
326 
327  // expoOut_01
328  // +1 | - - - - - - - ***********+****************+*****************+ -
329  // | *+***** | | |
330  // | **** | | | |
331  // | *** | | | |
332  // | ** | | | |
333  // | ** | | | |
334  // | * | | | |
335  //d | ** | | | |
336  //e |* |0.25 |0.50 |0.75 |1.00
337  //l 0-+----------------+----------------+----------------+-----------------+----
338  //t | PI/2 PI 3PI/4 2PI
339  //a |
340  // |
341  // |
342  // |
343  // |
344  // |
345  // |
346  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
347  // | time
348 
349  // expoInOut_01
350  // +1 | - - - - - - - - - - - - - -********+*****************+ -
351  // | **** | |
352  // | ** | |
353  // | * | |
354  // | * | |
355  // | *+ | |
356  // | * | | |
357  //d | *** | | |
358  //e | 0.25 ***** |0.50 |0.75 |1.00
359  //l 0-+****************+******----------+----------------+-----------------+----
360  //t | PI/2 PI 3PI/4 2PI
361  //a |
362  // |
363  // |
364  // |
365  // |
366  // |
367  // |
368  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
369  // | time
370 
371  // sineIn_01
372  // +1 | - - - - - - - - - - - - - - - - - - - - - ****+ -
373  // | ***** |
374  // | ***** |
375  // | *+*** |
376  // | ***** | |
377  // | ****** | |
378  // | *+**** | |
379  //d | ******* | | |
380  //e | **+******** |0.50 |0.75 |1.00
381  //l 0-+**************--+----------------+----------------+-----------------+----
382  //t | PI/2 PI 3PI/4 2PI
383  //a |
384  // |
385  // |
386  // |
387  // |
388  // |
389  // |
390  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
391  // | time
392 
393  // sineOut_01
394  // +1 | - - - - - - - - - - - - - - - -**+*****************+ -
395  // | ********* | |
396  // | +***** | |
397  // | ******| | |
398  // | ****** | | |
399  // | +**** | | |
400  // | *****| | | |
401  //d | ***** | | | |
402  //e | **** |0.25 |0.50 |0.75 |1.00
403  //l 0-+**--------------+----------------+----------------+-----------------+----
404  //t | PI/2 PI 3PI/4 2PI
405  //a |
406  // |
407  // |
408  // |
409  // |
410  // |
411  // |
412  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
413  // | time
414 
415  // sineInOut_01
416  // +1 | - - - - - - - - - - - - - - - - - -**************+ -
417  // | **+*** |
418  // | ****** | |
419  // | ***** | |
420  // | +*** | |
421  // | *****| | |
422  // | ***** | | |
423  //d | ****** | | |
424  //e | ******+0.25 |0.50 |0.75 |1.00
425  //l 0-+**********------+----------------+----------------+-----------------+----
426  //t | PI/2 PI 3PI/4 2PI
427  //a |
428  // |
429  // |
430  // |
431  // |
432  // |
433  // |
434  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
435  // | time
436 
437  // circIn_01
438  // +1 | - - - - - - - - - - - - - - - - - - - - - - + -
439  // | *|
440  // | ** |
441  // | *** |
442  // | **** |
443  // | ***** |
444  // | ****+** |
445  //d | ********* | |
446  //e | 0.25 ***********+***0 |0.75 |1.00
447  //l 0-+****************+*****-----------+----------------+-----------------+----
448  //t | PI/2 PI 3PI/4 2PI
449  //a |
450  // |
451  // |
452  // |
453  // |
454  // |
455  // |
456  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
457  // | time
458 
459  // circOut_01
460  // +1 | - - - - - - - - - - - - ************+*****************+ -
461  // | *******+**** | |
462  // | ******** | | |
463  // | ****+* | | |
464  // | **** | | | |
465  // | **** | | | |
466  // | ** | | | |
467  //d |** | | | |
468  //e | |0.25 |0.50 |0.75 |1.00
469  //l 0-+----------------+----------------+----------------+-----------------+----
470  //t | PI/2 PI 3PI/4 2PI
471  //a |
472  // |
473  // |
474  // |
475  // |
476  // |
477  // |
478  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
479  // | time
480 
481  // circInOut_01
482  // +1 | - - - - - - - - - - - - - - - ***+*****************+ -
483  // | ******* | |
484  // | **** | |
485  // | ** | |
486  // | | |
487  // | + | |
488  // | ***| | |
489  //d | ***** | | |
490  //e | *+******** |0.50 |0.75 |1.00
491  //l 0-+***************-+----------------+----------------+-----------------+----
492  //t | PI/2 PI 3PI/4 2PI
493  //a |
494  // |
495  // |
496  // |
497  // |
498  // |
499  // |
500  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
501  // | time
502 
503  // backIn_01
504  // +1 | - - - - - - - - - - - - - - - - - - - - - - *+ -
505  // | ** |
506  // | ** |
507  // | ** |
508  // | ** |
509  // | ** |
510  // | *** |
511  //d | +*** |
512  //e | 0.25 0.50 ****|0.75 |1.00
513  //l 0-+**************--+----------------+-----*******----+-----------------+----
514  //t | **+****************+***** 3PI/4 2PI
515  //a |
516  // |
517  // |
518  // |
519  // |
520  // |
521  // |
522  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
523  // | time
524 
525  // backOut_01
526  // +1 | - - - - - - *************+****************+*****************+ -
527  // | +*** | | |
528  // | ***| | | |
529  // | *** | | | |
530  // | ** | | | |
531  // | ** | | | |
532  // | ** | | | |
533  //d | ** | | | |
534  //e |** |0.25 |0.50 |0.75 |1.00
535  //l 0-+----------------+----------------+----------------+-----------------+----
536  //t | PI/2 PI 3PI/4 2PI
537  //a |
538  // |
539  // |
540  // |
541  // |
542  // |
543  // |
544  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
545  // | time
546 
547  // backInOut_01
548  // +1 | - - - - - - - - - - - - - *********+*****************+ -
549  // | *** | |
550  // | * | |
551  // | ** | |
552  // | * | |
553  // | *+ | |
554  // | * | | |
555  //d | ** | | |
556  //e | 0.25 *** |0.50 |0.75 |1.00
557  //l 0-+********--------+-----****-------+----------------+-----------------+----
558  //t | ********+***** PI 3PI/4 2PI
559  //a |
560  // |
561  // |
562  // |
563  // |
564  // |
565  // |
566  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
567  // | time
568 
569  // bounceIn_01
570  // +1 | - - - - - - - - - - - - - - - - - - - -********+ -
571  // | *** |
572  // | *** |
573  // | ** |
574  // | +* |
575  // | *| |
576  // | ** | |
577  //d | **********+**** ** | |
578  //e | ***** 0.2*** |0.50**** * |0.75 |1.00
579  //l 0-+**********-----*+***-------------+--------**------+-----------------+----
580  //t | PI/2 PI 3PI/4 2PI
581  //a |
582  // |
583  // |
584  // |
585  // |
586  // |
587  // |
588  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
589  // | time
590 
591  // bounceOut_01
592  // +1 | - - - - - - - ***** - - - - - - ***+*****************+ -
593  // | * **** ***** | |
594  // | ** *+******** | |
595  // | * | | |
596  // | ** | | |
597  // | *+ | | |
598  // | *** | | | |
599  //d | *** | | | |
600  //e | **** |0.25 |0.50 |0.75 |1.00
601  //l 0-+*****-----------+----------------+----------------+-----------------+----
602  //t | PI/2 PI 3PI/4 2PI
603  //a |
604  // |
605  // |
606  // |
607  // |
608  // |
609  // |
610  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
611  // | time
612 
613  // bounceInOut_01
614  // +1 | - - - - - - - - - - - - - - -*****- - *************+ -
615  // | * +**** |
616  // | ** | |
617  // | *** | |
618  // | **+***** | |
619  // | *** | | |
620  // | *** | | |
621  //d | * | | |
622  //e | ******+***5 ** |0.50 |0.75 |1.00
623  //l 0-+**********------+---**-----------+----------------+-----------------+----
624  //t | PI/2 PI 3PI/4 2PI
625  //a |
626  // |
627  // |
628  // |
629  // |
630  // |
631  // |
632  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
633  // | time
634 
635  // elasticIn_01
636  // +1 | - - - - - - - - - - - - - - - - - - - - - - + -
637  // | *|
638  // | |
639  // | * |
640  // | |
641  // | * |
642  // | |
643  //d | * |
644  //e | 0.25 0.50 *****+*.75 |1.00
645  //l 0-+****************+****************+***********-----+-**---------*----+----
646  //t | PI/2 PI 3PI*4 * 2PI
647  //a | ** *
648  // | ** *
649  // | *
650  // |
651  // |
652  // |
653  // |
654  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
655  // | time
656 
657  // elasticOut_01
658  // +1 |****************+****************+****************+*****************+ -
659  // | | | | |
660  // | | | | |
661  // | | | | |
662  // | | | | |
663  // | | | | |
664  // | | | | |
665  //d | | | | |
666  //e | |0.25 |0.50 |0.75 |1.00
667  //l 0-+----------------+----------------+----------------+-----------------+----
668  //t | PI/2 PI 3PI/4 2PI
669  //a |
670  // |
671  // |
672  // |
673  // |
674  // |
675  // |
676  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
677  // | time
678 
679  // elasticInOut_01
680  // +1 | - - - - - - - - - - - - *************+*****************+ -
681  // | * | |
682  // | * | |
683  // | | |
684  // | * | |
685  // | + | |
686  // | *| | |
687  //d | * | | |
688  //e | 0.25 |0.50 |0.75 |1.00
689  //l 0-+****************+*******-----**--+----------------+-----------------+----
690  //t | PI/2 ***** PI 3PI/4 2PI
691  //a |
692  // |
693  // |
694  // |
695  // |
696  // |
697  // |
698  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
699  // | time
700 
701  // sinPi2_01
702  // +1 | - - - - - - - - - - - - - - - -**+*****************+ -
703  // | ********* | |
704  // | +***** | |
705  // | ******| | |
706  // | ****** | | |
707  // | +**** | | |
708  // | *****| | | |
709  //d | ***** | | | |
710  //e | **** |0.25 |0.50 |0.75 |1.00
711  //l 0-+**--------------+----------------+----------------+-----------------+----
712  //t | PI/2 PI 3PI/4 2PI
713  //a |
714  // |
715  // |
716  // |
717  // |
718  // |
719  // |
720  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
721  // | time
722 
723  // acelBreak_01
724  // +1 | - - - - - - - - - - - - - - - - - -**************+ -
725  // | **+*** |
726  // | ****** | |
727  // | ***** | |
728  // | +*** | |
729  // | *****| | |
730  // | ***** | | |
731  //d | ****** | | |
732  //e | ******+0.25 |0.50 |0.75 |1.00
733  //l 0-+**********------+----------------+----------------+-----------------+----
734  //t | PI/2 PI 3PI/4 2PI
735  //a |
736  // |
737  // |
738  // |
739  // |
740  // |
741  // |
742  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
743  // | time
744 
745  // cos2Pi_11
746  // +1 +*****- - - - - - - - - - - - - - - - - - - -*****+ -
747  // | ** ** |
748  // | * * |
749  // | ** ** |
750  // | * * |
751  // | ** ** |
752  // | * * |
753  //d | * * |
754  //e | * 0.25 0.50 0*75 |1.00
755  //l 0-+----------------+----------------+----------------+*----------------+----
756  //t | *I/2 |PI +3PI/4 2PI
757  //a | ** | **
758  // | * | *
759  // | * | *
760  // | ** | **
761  // | * | *
762  // | ** | **
763  // | ** | **
764  // -1 | - - - - - - - - - ****+***** - - - - - - - - - - -
765  // | time
766 
767  // sin2Pi_00
768  // +1 | - - - -****+***** - - - - - - - - - - - - - - - - -
769  // | *** | **
770  // | * | **
771  // | ** | *
772  // | * | **
773  // | * | *
774  // | ** | *
775  //d | * | *
776  //e |* |0.25 * 0.50 0.75 1.00
777  //l 0-+----------------+----------------+*---------------+-----------------+----
778  //t | PI/2 P* |3PI/4 * 2PI
779  //a | * | *
780  // | * | **
781  // | * | *
782  // | ** | *
783  // | * | **
784  // | ** | *
785  // | ** | ***
786  // -1 | - - - - - - - - - - - - - - - ****+*****- - - - - -
787  // | time
788 
789  // sinPi_00
790  // +1 | - - - - - - - -*********+**********- - - - - - - - - -
791  // | ***** | *****
792  // | +** | *+*
793  // | ***| | | ***
794  // | *** | | | ***
795  // | ** | | | **
796  // | *** | | | ***
797  //d | ** | | | **
798  //e | ** |0.25 |0.50 |0.75 ** 1.00
799  //l 0-+*---------------+----------------+----------------+----------------*+----
800  //t | PI/2 PI 3PI/4 2PI
801  //a |
802  // |
803  // |
804  // |
805  // |
806  // |
807  // |
808  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
809  // | time
810 
811  // sinPi2Pi_10
812  // +1 +****************+***- - - - - - - - - - - - - - - - - -
813  // | | *********
814  // | | ****+*
815  // | | | ******
816  // | | | ******
817  // | | | ***+*
818  // | | | | *****
819  //d | | | | *****
820  //e | |0.25 |0.50 |0.75 **** 1.00
821  //l 0-+----------------+----------------+----------------+---------------**+----
822  //t | PI/2 PI 3PI/4 2PI
823  //a |
824  // |
825  // |
826  // |
827  // |
828  // |
829  // |
830  // -1 | - - - - - - - - - - - - - - - - - - - - - - - -
831  // | time
832 
833  // sin4Pi_00
834  // +1 | - -*****- - - - - - - - - - ***** - - - - - - - - -
835  // | ** * * *
836  // | * * *
837  // | * * *
838  // | * * *
839  // | * *
840  // | * * *
841  //d |* *
842  //e | 0.25 *.50 +0.75 1.00
843  //l 0-+----------------+----------------+----------------+*----------------+----
844  //t | *I/2 +PI 3PI/4 2PI
845  //a | * *
846  // | * * *
847  // | * *
848  // | * * *
849  // | * * *
850  // | * * *
851  // | * * * **
852  // -1 | - - - - - - - ***** - - - - - - - - - -*****- - - -
853  // | time
854 
855  // sin3Pi4_00
856  // +1 | - - ******- - - - - - - - - - - - - -****** - - - -
857  // | ** ** ** **
858  // | * + * *
859  // | * |* + *
860  // | * | * *| *
861  // | * | * * | *
862  // | * | * * | *
863  //d | | |
864  //e |* |0.25* 0.50 * |0.75 * 1.00
865  //l 0-+----------------+-----*----------+-----------*----+-----------------+----
866  //t | PI/2 * |PI * 3PI/4 2PI
867  //a | |
868  // | * | *
869  // | * | *
870  // | * | *
871  // | * | *
872  // | * | *
873  // | ** | **
874  // -1 | - - - - - - - - - - **+*** - - - - - - - - - - - -
875  // | time
876 */
877 
878 #ifndef __EASE_H__
879 #define __EASE_H__
880 
881 #include <math.h>
882 
883 namespace rag
884 {
885 
887 class Ease
888 {
889 
890 public:
891 
893  enum EaseType
894  {
895  linear_01,
896 
897  quadIn_01,
898  quadOut_01,
899  quadInOut_01,
900  cubicIn_01,
901  cubicOut_01,
902  cubicInOut_01,
903  quartIn_01,
904  quartOut_01,
905  quartInOut_01,
906  quintIn_01,
907  quintOut_01,
908  quintInOut_01,
909  expoIn_01,
910  expoOut_01,
911  expoInOut_01,
912  sineIn_01,
913  sineOut_01,
914  sineInOut_01,
915  circIn_01,
916  circOut_01,
917  circInOut_01,
918  backIn_01,
919  backOut_01,
920  backInOut_01,
921  bounceIn_01,
922  bounceOut_01,
923  bounceInOut_01,
924  elasticIn_01,
925  elasticOut_01,
926  elasticInOut_01,
927 
928  sinPi2_01,
929  acelBreak_01,
930  cos2Pi_11,
931 
932  sin2Pi_00,
933  sinPi_00,
934  sinPi2Pi_10,
935  sin4Pi_00,
936  sin3Pi4_00
937  };
938 
939  EaseType type;
940 
941  float PIf;
942 
944  Ease(EaseType myType = linear_01):
945  PIf(3.1415926535897932384626433832795f)
946  {
947  type = myType;
948  }
949 
952  {
953  return type;
954  }
955 
957  void setType(EaseType myType)
958  {
959  type = myType;
960  }
961 
963  float get(float t /*current (t)*/, float d /*total (t)*/)
964  {
965 
966  if(t >= d)
967  {
968  if(type >= sin2Pi_00)
969  return 0;
970 
971  return 1;
972  }
973 
974  switch(type)
975  {
976  case linear_01:
977  {
978  return t/d;
979  }
980 
981  case sin2Pi_00:
982  {
983  float delta = t/d;
984  return sin(delta * 2.0f * PIf);
985  }
986 
987  case sinPi_00:
988  {
989  float delta = t/d;
990  return sin(delta * PIf);
991  }
992 
993  case sinPi2Pi_10:
994  {
995  float delta = t/d;
996  return sin((0.5f * PIf) * (delta + 1));
997  }
998 
999  case sin4Pi_00:
1000  {
1001  float delta = t/d;
1002  return sin(delta * 4.0f * PIf);
1003  }
1004 
1005  case sin3Pi4_00:
1006  {
1007  float delta = t/d;
1008  return sin(delta * 3.0f * PIf);
1009  }
1010 
1011  case sinPi2_01:
1012  {
1013  float delta = t/d;
1014  return sin(delta * 0.5f * PIf);
1015  }
1016 
1017  case acelBreak_01:
1018  {
1019  float delta = t/d;
1020  return (sin((delta * PIf) - (PIf * 0.5f)) + 1.0f) * 0.5f;
1021  }
1022 
1023  case cos2Pi_11:
1024  {
1025  float delta = t/d;
1026  return cos(delta * 2.0f * PIf);
1027  }
1028 
1029 
1030  case backIn_01: //?
1031  {
1032  float s = 1.70158f;
1033  float postFix = t/=d;
1034 
1035  return (postFix)*t*((s+1)*t - s);
1036  }
1037 
1038  case backOut_01: //?
1039  {
1040  float s = 1.70158f;
1041 
1042  return (float)(1.0*((t=t/d-1)*t*((s+1)*t + s) + 1));
1043  }
1044 
1045  case backInOut_01: //?
1046  {
1047  float s = 1.70158f;
1048 
1049  if ((t/=d/2) < 1)
1050  return (float)(1.0/2*(t*t*(((s*=(1.525f))+1)*t - s)));
1051 
1052  float postFix = t-=2;
1053 
1054  return (float)(1.0/2*((postFix)*t*(((s*=(1.525f))+1)*t + s) + 2));
1055  }
1056 
1057 
1058  #define bounce \
1059  if ((t/=d) < (1/2.75f)) \
1060  { \
1061  v = (float)(1.0f*(7.5625f*t*t)); \
1062  } \
1063  else if (t < (2.0f/2.75f)) \
1064  { \
1065  float postFix = t-=(1.5f/2.75f); \
1066  \
1067  v = 1.0f*(7.5625f*(postFix)*t + .75f); \
1068  } \
1069  else if (t < (2.5f/2.75f)) \
1070  { \
1071  float postFix = t-=(2.25f/2.75f); \
1072  \
1073  v = 1.0f*(7.5625f*(postFix)*t + .9375f); \
1074  } \
1075  else \
1076  { \
1077  float postFix = t-=(2.625f/2.75f); \
1078  \
1079  v = 1.0f*(7.5625f*(postFix)*t + .984375f); \
1080  }
1081 
1082  case bounceIn_01: //?
1083  {
1084  float v;
1085 
1086  t = d-t;
1087 
1088  bounce
1089 
1090  return 1.0f - v;
1091  }
1092 
1093  case bounceOut_01: //?
1094  {
1095  float v;
1096 
1097  bounce
1098 
1099  return v;
1100  }
1101 
1102  case bounceInOut_01: //?
1103  {
1104  float v;
1105 
1106  if (t < d/2)
1107  {
1108  t = t*2;
1109 
1110  t = d-t;
1111 
1112  bounce
1113 
1114  return (float)((1.0 - v) * .5f);
1115  }
1116  else
1117  {
1118  t = t*2 -d;
1119 
1120  bounce
1121 
1122  return (float)(v * .5f + 1.0*.5f);
1123  }
1124  }
1125 
1126  #undef bounce
1127 
1128 
1129  case circIn_01:
1130  t /= d;
1131  return (float)(1.0 - sqrt(1 - t*t));
1132 
1133  case circOut_01: //*
1134  t /= d;
1135  t--;
1136  return (float)(sqrt(1 - t*t));
1137 
1138  case circInOut_01: //*
1139  t /= d/2;
1140  if(t < 1)
1141  return (float)(-1.0/2 * (sqrt(1 - t*t) - 1));
1142 
1143  t-=2;
1144 
1145  return (float)(1.0/2 * (sqrt(1 - t*t) + 1));
1146 
1147 
1148  case elasticIn_01: //?
1149  {
1150  //if (t==0)
1151  // return 0;
1152 
1153  t/=d;
1154 
1155  float p=d*.3f;
1156  float a=1.0;
1157  float s=p/4;
1158  float postFix =a*(float)(pow(2,10*(t-=1))); // this is a fix, again, with post-increment operators
1159 
1160  return (float)(-(postFix * sin((t*d-s)*(2*PIf)/p )));
1161  }
1162 
1163  case elasticOut_01: //?
1164  {
1165  //if (t==0)
1166  // return 0;
1167 
1168  //if ((t/=d)==1)
1169  // return 1.0;
1170 
1171  float p=d*.3f;
1172  float a=1.0;
1173  float s=p/4;
1174 
1175  return (float)((a*pow(2,-10*t) * sin( (t*d-s)*(2*PIf)/p ) + 1.0));
1176  }
1177 
1178  case elasticInOut_01: //?
1179  {
1180  //if (t==0)
1181  // return 0;
1182 
1183  t/=d/2;
1184  //if ((t/=d/2)==2)
1185  // return 1.0;
1186 
1187  float p=d*(.3f*1.5f);
1188  float a=1.0;
1189  float s=p/4;
1190 
1191  if (t < 1)
1192  {
1193  float postFix = (float)(a*pow(2,10*(t-=1))); // postIncrement is evil
1194 
1195  return (float)(-.5f*(postFix* sin( (t*d-s)*(2*PIf)/p )));
1196  }
1197 
1198  float postFix = a*(float)(pow(2,-10*(t-=1))); // postIncrement is evil
1199 
1200  return (float)(postFix * sin( (t*d-s)*(2*PIf)/p )*.5f + 1.0);
1201  }
1202 
1203 
1204 
1205  case expoIn_01: //*
1206  return (float)(pow(2, 10 * (t/d - 1)));
1207 
1208  case expoOut_01: //*
1209  return (float)(1.0 - ( t == d ? 0 : pow(2.0, -10.0 * (t/d))));
1210 
1211  case expoInOut_01: //*
1212 
1213  //if( t == 0 ) //new
1214  // ;//return 0.0;
1215 
1216  //if( t == d) //new
1217  // return 1.0;
1218 
1219  t /= d/2;
1220 
1221  if (t < 1)
1222  return (float)(1.0/2 * pow(2, 10 * (t - 1)));
1223 
1224  t--;
1225 
1226  return (float)(1.0/2 * (-pow(2, -10 * t) + 2));
1227 
1228 
1229 
1230  case quadIn_01: //*
1231  t /= d;
1232  return (float)(t*t);
1233 
1234  case quadOut_01: //*
1235  t /= d;
1236  return (float)((2.0 - t) * t);
1237 
1238  case quadInOut_01: //*
1239  t /= d/2;
1240 
1241  if(t < 1)
1242  return (float)(1.0/2*t*t);
1243 
1244  t--;
1245 
1246  return (float)(-1.0/2 * (t*(t-2) - 1));
1247 
1248 
1249  case cubicIn_01: //*
1250  t /= d;
1251  return (float)(t*t*t);
1252 
1253  case cubicOut_01: //*
1254  t /= d;
1255  t--;
1256  return (float)(1.0 + t*t*t);
1257 
1258  case cubicInOut_01: //*
1259  t /= d/2;
1260 
1261  if (t < 1)
1262  return (float)(1.0/2*t*t*t);
1263 
1264  t -= 2;
1265 
1266  return (float)(1.0/2*(t*t*t + 2));
1267 
1268 
1269 
1270  case quartIn_01: //*
1271  t /= d;
1272  return (float)(t*t*t*t);
1273 
1274  case quartOut_01: //*
1275  t /= d;
1276  t--;
1277  return (float)(1.0 - t*t*t*t);
1278 
1279  case quartInOut_01: //*
1280 
1281  t /= d/2;
1282 
1283  if(t < 1)
1284  return (float)(1.0/2*t*t*t*t);
1285 
1286  t -= 2;
1287 
1288  return (float)(-1.0/2 * (t*t*t*t - 2));
1289 
1290 
1291 
1292  case quintIn_01: //*
1293  t /= d;
1294  return (float)(t*t*t*t*t);
1295 
1296  case quintOut_01: //*
1297  t /= d;
1298  t--;
1299  return (float)(1.0 + t*t*t*t*t);
1300 
1301  case quintInOut_01: //*
1302 
1303  t /= d/2;
1304 
1305  if(t < 1)
1306  return (float)(1.0/2*t*t*t*t*t);
1307 
1308  t -= 2;
1309 
1310  return (float)(1.0/2*(t*t*t*t*t + 2));
1311 
1312 
1313 
1314  case sineIn_01: //*
1315  return (float)(1.0 - cos(t/d * (PIf/2)));
1316 
1317  case sineOut_01: //*
1318  return sin(t/d * (PIf/2));
1319 
1320  case sineInOut_01: //*
1321  return (float)(-1.0/2 * (cos(PIf*t/d) - 1));
1322 
1323  default:
1324  //undefined();
1325  return 0;
1326  }
1327  }
1328 };
1329 
1330 } // rag
1331 
1332 #endif
Ease(EaseType myType=linear_01)
Constructs an Ease curve.
Definition: Ease.h:944
EaseType getType()
Returns the current type.
Definition: Ease.h:951
Definition: Bitmap.h:8
Collection of code-generated curves useful to create procedural tween animations. ...
Definition: Ease.h:887
void setType(EaseType myType)
Sets the current EaseType.
Definition: Ease.h:957
EaseType
The types of curve supported.
Definition: Ease.h:893