blob: 1f79405eae4e63beec53ae0772ea4979fccd97e3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// Math for Game Programmers: Fast and Funky 1D Nonlinear Transformations
// https://www.youtube.com/watch?v=mr5xkf6zSzk
#ifndef INTERPOLATE_H
#define INTERPOLATE_H
#define smooth_start_2( t ) ( t * t )
#define smooth_start_3( t ) ( smooth_start_2( t ) * t )
#define smooth_start_4( t ) ( smooth_start_3( t ) * t )
#define smooth_start_5( t ) ( smooth_start_4( t ) * t )
#define smooth_start_6( t ) ( smooth_start_5( t ) * t )
#define smooth_stop_2( t ) ( flip( smooth_start_2( flip( t ) ) ) )
#define smooth_stop_3( t ) ( flip( smooth_start_3( flip( t ) ) ) )
#define smooth_stop_4( t ) ( flip( smooth_start_4( flip( t ) ) ) )
#define smooth_stop_5( t ) ( flip( smooth_start_5( flip( t ) ) ) )
#define smooth_stop_6( t ) ( flip( smooth_start_6( flip( t ) ) ) )
#define smooth_step_3( t ) ( crossfade( smooth_start_2( t ), smooth_stop_2( t ), t ) )
#define mix( a, b, b_weight ) ( a + b_weight * ( b - a ) )
#define crossfade( a, b, t ) ( a + t * ( b - a ) )
#define scale( a, t ) ( t * a )
#define reverse_scale( a, t ) ( ( 1 - t ) * a )
#define arch_2( t ) ( scale( flip( t ), t ) )
#define smooth_start_arch_3( t ) ( scale( arch_2( t ), t ) )
#define smooth_stop_arch_3( t ) ( reverse_scale( arch_2( t ), t ) )
#define flip( x ) ( 1 - x )
#endif
|