equal
deleted
inserted
replaced
1 #====================================================================== |
1 #====================================================================== |
2 # L I B V E C . P L |
2 # L I B V E C . P L |
3 # doc: Sat Mar 20 12:50:32 1999 |
3 # doc: Sat Mar 20 12:50:32 1999 |
4 # dlm: Wed Nov 27 23:46:31 2013 |
4 # dlm: Wed May 21 21:26:22 2014 |
5 # (c) 1999 A.M. Thurnherr |
5 # (c) 1999 A.M. Thurnherr |
6 # uE-Info: 36 53 NIL 0 0 70 2 2 4 NIL ofnI |
6 # uE-Info: 39 0 NIL 0 0 70 2 2 4 NIL ofnI |
7 #====================================================================== |
7 #====================================================================== |
8 |
8 |
9 # HISTORY: |
9 # HISTORY: |
10 # Mar 20, 1999: - created for ANTS_2.1 (no more c-code) |
10 # Mar 20, 1999: - created for ANTS_2.1 (no more c-code) |
11 # May 27, 1999: - added polar/cartesian conversions |
11 # May 27, 1999: - added polar/cartesian conversions |
32 # Nov 5, 2009: - added angle(); vel_bias() => angle_diff() |
32 # Nov 5, 2009: - added angle(); vel_bias() => angle_diff() |
33 # Apr 22, 2010: - added angle_ts() |
33 # Apr 22, 2010: - added angle_ts() |
34 # Jun 5, 2012: - added &closestPointOnStraightLine() |
34 # Jun 5, 2012: - added &closestPointOnStraightLine() |
35 # Jun 11, 2012: - addeed $t output to &closestPointOnStraightLine() |
35 # Jun 11, 2012: - addeed $t output to &closestPointOnStraightLine() |
36 # Nov 27, 2013: - added &angle_pos(), mag_heading() |
36 # Nov 27, 2013: - added &angle_pos(), mag_heading() |
|
37 # Mar 3, 2014: - made deg(), rad() handle nans |
|
38 # Mar 4, 2014: - made some angle funs handle nans |
37 |
39 |
38 require "$ANTS/libPOSIX.pl"; # acos() |
40 require "$ANTS/libPOSIX.pl"; # acos() |
39 |
41 |
40 #---------------------------------------------------------------------- |
42 #---------------------------------------------------------------------- |
41 # &rad() calc radians |
43 # &rad() calc radians |
44 |
46 |
45 $PI = 3.14159265358979; |
47 $PI = 3.14159265358979; |
46 |
48 |
47 sub rad(@) |
49 sub rad(@) |
48 { |
50 { |
49 my($d) = &antsFunUsage(1,"f","<deg>",@_); |
51 my($d) = &antsFunUsage(1,".","<deg>",@_); |
50 return $d/180 * $PI; |
52 return numberp($d) ? $d/180 * $PI : nan; |
51 } |
53 } |
52 |
54 |
53 sub deg(@) |
55 sub deg(@) |
54 { |
56 { |
55 my($r) = &antsFunUsage(1,"f","<rad>",@_); |
57 my($r) = &antsFunUsage(1,".","<rad>",@_); |
56 return $r/$PI * 180; |
58 return numberp($r) ? $r/$PI * 180 : nan; |
57 } |
59 } |
58 |
60 |
59 |
61 |
60 #---------------------------------------------------------------------- |
62 #---------------------------------------------------------------------- |
61 # &proj(from_x,from_y,onto_unit_x,onto_unit_y) |
63 # &proj(from_x,from_y,onto_unit_x,onto_unit_y) |
166 # return time series of angle without "wrap-around jumps" |
168 # return time series of angle without "wrap-around jumps" |
167 #---------------------------------------------------------------------- |
169 #---------------------------------------------------------------------- |
168 |
170 |
169 sub angle(@) |
171 sub angle(@) |
170 { |
172 { |
171 my($val) = &antsFunUsage(1,"f","<val>",@_); |
173 my($val) = &antsFunUsage(1,".","<val>",@_); |
|
174 return nan unless numberp($val); |
172 $val += 360 while ($val < -180); |
175 $val += 360 while ($val < -180); |
173 $val -= 360 while ($val > 180); |
176 $val -= 360 while ($val > 180); |
174 return $val; |
177 return $val; |
175 } |
178 } |
176 |
179 |
177 sub angle_pos(@) |
180 sub angle_pos(@) |
178 { |
181 { |
179 my($val) = angle(@_); |
182 my($val) = angle(@_); |
|
183 return nan unless numberp($val); |
180 return ($val < 0) ? 360+$val : $val; |
184 return ($val < 0) ? 360+$val : $val; |
181 } |
185 } |
182 |
186 |
183 sub angle_diff(@) |
187 sub angle_diff(@) |
184 { |
188 { |
185 my($m,$s) = &antsFunUsage(2,"ff","<minuend> <subtrahend>",@_); |
189 my($m,$s) = &antsFunUsage(2,"..","<minuend> <subtrahend>",@_); |
|
190 return nan unless numbersp($m,$s); |
186 return angle($m-$s); |
191 return angle($m-$s); |
187 } |
192 } |
188 |
193 |
189 { my($last_in); |
194 { my($last_in); |
190 |
195 |