223 {
224 float p = 1 - magnitude;
225
226 if( t == 0 || t == 1 )
227 {
228 return t;
229 }
230
231 float scaledTime = t * 2;
232 float scaledTime1 = scaledTime - 1;
233
234 float s = p / ( 2 * Math.PI ) * Math.Asin( 1 );
235
236 if( scaledTime < 1 )
237 {
238 return -0.5 * (Math.Pow( 2, 10 * scaledTime1 ) * Math.Sin( ( scaledTime1 - s ) * ( 2 * Math.PI ) / p ));
239 }
240
241 return (Math.Pow( 2, -10 * scaledTime1 ) * Math.Sin( ( scaledTime1 - s ) * ( 2 * Math.PI ) / p ) * 0.5) + 1;
242 }