libvec.pl
changeset 6 b965580e8782
parent 5 7d6e11d484ec
child 11 56799f01321a
--- a/libvec.pl
+++ b/libvec.pl
@@ -1,9 +1,9 @@
 #======================================================================
 #                    L I B V E C . P L 
 #                    doc: Sat Mar 20 12:50:32 1999
-#                    dlm: Wed Nov 27 23:46:31 2013
+#                    dlm: Wed May 21 21:26:22 2014
 #                    (c) 1999 A.M. Thurnherr
-#                    uE-Info: 36 53 NIL 0 0 70 2 2 4 NIL ofnI
+#                    uE-Info: 39 0 NIL 0 0 70 2 2 4 NIL ofnI
 #======================================================================
 
 # HISTORY:
@@ -34,6 +34,8 @@
 #	Jun  5, 2012: - added &closestPointOnStraightLine()
 #	Jun 11, 2012: - addeed $t output to &closestPointOnStraightLine()
 #	Nov 27, 2013: - added &angle_pos(), mag_heading()
+#	Mar  3, 2014: - made deg(), rad() handle nans
+#	Mar  4, 2014: - made some angle funs handle nans
 
 require "$ANTS/libPOSIX.pl";	# acos()
 
@@ -46,14 +48,14 @@
 
 sub rad(@)
 {
-	my($d) = &antsFunUsage(1,"f","<deg>",@_);
-	return $d/180 * $PI;
+	my($d) = &antsFunUsage(1,".","<deg>",@_);
+	return numberp($d) ? $d/180 * $PI : nan;
 }
 
 sub deg(@)
 {
-	my($r) = &antsFunUsage(1,"f","<rad>",@_);
-	return $r/$PI * 180;
+	my($r) = &antsFunUsage(1,".","<rad>",@_);
+	return numberp($r) ? $r/$PI * 180 : nan;
 }
 	
 
@@ -168,7 +170,8 @@
 
 sub angle(@)
 {
-	my($val) = &antsFunUsage(1,"f","<val>",@_);
+	my($val) = &antsFunUsage(1,".","<val>",@_);
+	return nan unless numberp($val);
 	$val += 360 while ($val < -180);
 	$val -= 360 while ($val > 180);
 	return $val;
@@ -177,12 +180,14 @@
 sub angle_pos(@)
 {
 	my($val) = angle(@_);
+	return nan unless numberp($val);
 	return ($val < 0) ? 360+$val : $val;
 }
 
 sub angle_diff(@)
 {
-	my($m,$s) = &antsFunUsage(2,"ff","<minuend> <subtrahend>",@_);
+	my($m,$s) = &antsFunUsage(2,"..","<minuend> <subtrahend>",@_);
+	return nan unless numbersp($m,$s);
 	return angle($m-$s);
 }