File Coverage

blib/lib/Algorithm/Easing/Sinusoidal.pm
Criterion Covered Total %
statement 27 27 100.0
branch 9 12 75.0
condition n/a
subroutine 7 7 100.0
pod 3 3 100.0
total 46 49 93.8


line stmt bran cond sub pod time code
1             package Algorithm::Easing::Sinusoidal;
2              
3 1     1   351 use Moose;
  1         2  
  1         3  
4              
5 1     1   3711 use Math::Trig qw(:pi);
  1         1  
  1         99  
6              
7 1     1   4 use constant EPSILON => 0.000001;
  1         1  
  1         58  
8              
9             extends 'Algorithm::Easing::Ease';
10              
11 1     1   4 use namespace::clean;
  1         4  
  1         6  
12              
13             sub ease_in {
14 402     402 1 340 my $self = shift;
15 402         486 my ($t,$b,$c,$d) = (shift,shift,shift,shift);
16              
17 402 100       541 return $b if ($t < EPSILON);
18 401 50       485 return $c if ($d < EPSILON);
19              
20 401         1248 return -$c * cos($t / $d * (pi / 2)) + $c + $b;
21             }
22              
23             sub ease_out {
24 402     402 1 326 my $self = shift;
25 402         381 my ($t,$b,$c,$d) = (shift,shift,shift,shift);
26              
27 402 100       492 return $b if ($t < EPSILON);
28 401 50       428 return $c if ($d < EPSILON);
29              
30 401         808 return $c * sin($t / $d * (pi / 2)) + $b;
31             }
32              
33             sub ease_both {
34 402     402 1 348 my $self = shift;
35 402         414 my ($t,$b,$c,$d) = (shift,shift,shift,shift);
36              
37 402 100       516 return $b if ($t < EPSILON);
38 401 50       473 return $c if ($d < EPSILON);
39              
40 401         1233 return -$c / 2 * (cos(pi * $t / $d) - 1) + $b;
41             }
42              
43             1;
44              
45             __END__
46              
47             # MAN3 POD
48              
49             =head1 NAME
50              
51             Algorithm::Easing::Sinusoidal - Calculate eased translations between two positive whole integer values over time
52              
53             =cut
54              
55             =head1 SYNOPSIS
56              
57             use Algorithm::Easing;
58             use Algorithm::Easing::Sinusoidal;
59              
60             # this example produces traditional 'sinusoidal' output;
61              
62             my $translation = Algorithm::Easing::Sinusoidal->new;
63              
64             # total time for eased translation as a real positive integer value
65             my $d = 2.5;
66              
67             # begin
68             my $b = 0;
69              
70             # change
71             my $c = 240;
72              
73             # time passed in seconds as a real positive integer between each frame
74             my $frame_time = 0.0625;
75              
76             my @p = [319,0];
77              
78             for(my $t = 0; $t < 2.5; $t += 0.0625) {
79             $p[1] = $translation->ease_out($t,$b,$c,$d)
80              
81             # plot
82             ...;
83             }
84              
85             =cut
86              
87             =head1 METHODS
88              
89             =cut
90              
91             =head2 ease_none
92             usage :
93            
94             Parameters :
95             Let t be time,
96             Let b be begin,
97             Let c be change,
98             Let d be duration,
99             Results :
100             Let p be position,
101            
102             my $p = $obj->ease_none($t,$b,$c,$d);
103              
104             This method is used for a linear translation between two positive real whole integers using a positive real integer as the parameter for time.
105              
106             =cut
107              
108             =head2 ease_in
109             usage :
110            
111             Parameters :
112             Let t be time,
113             Let b be begin,
114             Let c be change,
115             Let d be duration,
116             Results :
117             Let p be position,
118            
119             my $p = $obj->ease_in($t,$b,$c,$d);
120              
121             This method is used to ease in between two positive real whole integers as an inward tween using a positive real integer as the parameter for time in sinusoidal fashion.
122              
123             =cut
124              
125             =head2 ease_out
126             usage :
127            
128             Parameters :
129             Let t be time,
130             Let b be begin,
131             Let c be change,
132             Let d be duration,
133             Results :
134             Let p be position,
135            
136             my $p = $obj->ease_out($t,$b,$c,$d);
137              
138             This method is used to ease in between two positive real whole integers as an inward tween using a positive real integer as the parameter for time in sinusoidal fashion.
139              
140             =cut
141              
142             =head2 ease_both
143             usage :
144            
145             Parameters :
146             Let t be time,
147             Let b be begin,
148             Let c be change,
149             Let d be duration,
150             Results :
151             Let p be position,
152            
153             my $p = $obj->ease_both($t,$b,$c,$d);
154              
155             This method is used to ease both in then out between two positive real whole integers as an inward tween using a positive real integer as the parameter for time in sinusoidal.
156              
157             =cut
158              
159             =head1 AUTHOR
160              
161             Jason McVeigh, <jmcveigh@outlook.com>
162              
163             =cut
164              
165             =head1 COPYRIGHT AND LICENSE
166              
167             Copyright 2016 by Jason McVeigh
168              
169             This library is free software; you can redistribute it and/or modify
170             it under the same terms as Perl itself.
171              
172             =cut