Advertisement
skaramicke

Easing to zero - success

Apr 10th, 2015
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. - (void)testEasing {
  2.     double steps = 10;
  3.  
  4.     double start = 0;
  5.     double end = 100;
  6.     NSLog(@"Test %0.f to %0.f", start, end);
  7.     for (double i = 0; i < steps; i++) {
  8.         [self easeInOut:i b:start c:end d:steps];
  9.     }
  10.    
  11.     start = 100;
  12.     end = 0;
  13.     NSLog(@"Test %0.f to %0.f", start, end);
  14.     for (double i = 0; i < steps; i++) {
  15.         [self easeInOut:i b:start c:end d:steps];
  16.     }
  17.    
  18. }
  19.  
  20. // Source: http://gizma.com/easing/
  21. - (double)easeInOut:(double)t b:(double)b c:(double)c d:(double)d {
  22.  
  23.     if (t>d) return c;
  24.  
  25.     BOOL reverse = NO;
  26.     if (c < b) {
  27.         reverse = YES;
  28.         double newc = b;
  29.         b = c;
  30.         c = newc;
  31.     }
  32.    
  33.     NSInteger logStep = (NSInteger)t;
  34.     double result;
  35.     t /= d/2;
  36.     if (t < 1) {
  37.         result = c/2*t*t*t + b;
  38.         if (reverse) result = c - result;
  39.         NSLog(@"%ld: %f = %f/2*%f*%f*%f + %f", (long)logStep, result, c, t, t, t, b);
  40.         return result;
  41.     };
  42.     t -= 2;
  43.     result = c/2*(t*t*t + 2) + b;
  44.     if (reverse) result = c - result;
  45.     NSLog(@"%ld: %f = %f/2*(%f*%f*%f + 2) + %f", (long)logStep, result, c, t, t, t, b);
  46.     return result;
  47. }
  48.  
  49. // Resulting output
  50. //
  51. // Test 0 to 100
  52. // 0: 0.000000 = 100.000000/2*0.000000*0.000000*0.000000 + 0.000000
  53. // 1: 0.400000 = 100.000000/2*0.200000*0.200000*0.200000 + 0.000000
  54. // 2: 3.200000 = 100.000000/2*0.400000*0.400000*0.400000 + 0.000000
  55. // 3: 10.800000 = 100.000000/2*0.600000*0.600000*0.600000 + 0.000000
  56. // 4: 25.600000 = 100.000000/2*0.800000*0.800000*0.800000 + 0.000000
  57. // 5: 50.000000 = 100.000000/2*(-1.000000*-1.000000*-1.000000 + 2) + 0.000000
  58. // 6: 74.400000 = 100.000000/2*(-0.800000*-0.800000*-0.800000 + 2) + 0.000000
  59. // 7: 89.200000 = 100.000000/2*(-0.600000*-0.600000*-0.600000 + 2) + 0.000000
  60. // 8: 96.800000 = 100.000000/2*(-0.400000*-0.400000*-0.400000 + 2) + 0.000000
  61. // 9: 99.600000 = 100.000000/2*(-0.200000*-0.200000*-0.200000 + 2) + 0.000000
  62. //
  63. // Test 100 to 0
  64. // 0: 100.000000 = 100.000000/2*0.000000*0.000000*0.000000 + 0.000000
  65. // 1: 99.600000 = 100.000000/2*0.200000*0.200000*0.200000 + 0.000000
  66. // 2: 96.800000 = 100.000000/2*0.400000*0.400000*0.400000 + 0.000000
  67. // 3: 89.200000 = 100.000000/2*0.600000*0.600000*0.600000 + 0.000000
  68. // 4: 74.400000 = 100.000000/2*0.800000*0.800000*0.800000 + 0.000000
  69. // 5: 50.000000 = 100.000000/2*(-1.000000*-1.000000*-1.000000 + 2) + 0.000000
  70. // 6: 25.600000 = 100.000000/2*(-0.800000*-0.800000*-0.800000 + 2) + 0.000000
  71. // 7: 10.800000 = 100.000000/2*(-0.600000*-0.600000*-0.600000 + 2) + 0.000000
  72. // 8: 3.200000 = 100.000000/2*(-0.400000*-0.400000*-0.400000 + 2) + 0.000000
  73. // 9: 0.400000 = 100.000000/2*(-0.200000*-0.200000*-0.200000 + 2) + 0.000000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement