us.ihmc.utilities.math
Class MathTools

java.lang.Object
  extended by us.ihmc.utilities.math.MathTools

public class MathTools
extends java.lang.Object


Method Summary
static double angleMinusPiToPi(javax.vecmath.Vector2d startVector, javax.vecmath.Vector2d endVector)
           
static boolean arePointsInOrderColinear(javax.vecmath.Point3d startPoint, javax.vecmath.Point3d middlePoint, javax.vecmath.Point3d endPoint)
          arePointsInOrderColinear: This returns true is: middle point is epsilon close to start or end Otherwise: if the start is EPSILON close to the end, return false if |(start to midle unit vector) dot with (start to end unit vector) - 1| > EPSILON return false else return true
static double averageNumbers(java.util.ArrayList<java.lang.Double> values)
           
static double clipToMinMax(double val, double min, double max)
          Returns max if max greater than given value Returns min if min less than given value Reutrns value if value is between max and min
static double computeAngleAverage(double angleA, double angleB)
           
static double computeAngleDifferenceMinusPiToPi(double angleA, double angleB)
          computeAngleDifferenceMinusPiToPi: returns (angleA - angleB), where the return value is [-pi, pi)
static double computeAngleDifferenceMinusTwoPiToZero(double angleA, double angleB)
          computeAngleDifferenceMinusPiToPi: returns (angleA - angleB), where the return value is [-2.0*pi, 0.0)
static java.util.ArrayList<FrameVector> diff(java.util.ArrayList<FrameVector> array)
           
static double[] diff(double[] array)
          Subtracts each element of a double array by the previous element in the array, returns the new array
static java.util.ArrayList<FrameVector> diffWithAlphaFilter(java.util.ArrayList<FrameVector> array, double alpha, double dt)
           
static double[] dotPlus(double[] array, double addToAllElementsOfA)
          Adds parameter 'addToAllElements' to all elements of the double array and returns the new array
static int[] dotPlus(int[] array, int addToAllElementsOfA)
          Adds parameter 'addToAllElements' to all elements of the integer array and returns the new array
static boolean epsilonEquals(double v1, double v2, double epsilon)
          True if value |(v1-v2)| <= |epsilon| false if not
static int findClosestNinetyDegreeYaw(double yawInRadians)
          Finds the closest 90 degree yaw and returns number of 90 degrees (0 = 0; 1 = 90; 2 = 180; 3 = 270).
static double findZeroCrossing(MathFunction mathFunction, double min, double max, double tolerance)
           
static double generateRandomAngle(java.util.Random random)
          Returns an evenly distributed random number between -2PI and 2PI
static double generateRandomDoubleInRange(java.util.Random random, double range1, double range2)
          Returns an evenly distributed random number between two bounds.
static javax.vecmath.Point3d generateRandomPoint3d(java.util.Random random, double[] range1, double[] range2)
          Returns an evenly distributed random point3d.
static double[] getFirstDerivatives(javax.vecmath.Point2d[] points)
           
static void getQuaternionFromTransform3D(javax.media.j3d.Transform3D transform3D, javax.vecmath.Quat4d q1)
          Places the quaternion equivalent of the normalized rotational component of this transform into the quaternion parameter.
static java.util.ArrayList getReversedArrayList(java.util.ArrayList arrayList)
          Returns the Array in Reverse Order
static boolean isInsideBounds(double val, double min, double max)
          Checks to see if val is Inside Bounds of max and min
static javax.media.j3d.Transform3D loadTransform(java.io.BufferedReader bufferedReader)
           
static void main(java.lang.String[] args)
           
static double max(double[] array)
          Finds and returns the max value in an array of Doubles
static double mean(java.util.ArrayList<java.lang.Double> array)
           
static double mean(double[] array)
           
static double min(double[] array)
          Finds and returns the min value in an array of doubles
static void saveTransform(javax.media.j3d.Transform3D transform3D, java.io.PrintWriter printWriter)
           
static double shiftAngleToStartOfRange(double angleToShift, double startOfAngleRange)
          This will shift an angle to be in the range [startOfAngleRange, (startOfAngleRange + 2*pi)
static double sign(double argument)
          Returns the sign of the argument.
static java.util.ArrayList<java.util.ArrayList> splitArrayIntoEqualishParts(java.util.ArrayList array, int numberOfParts)
          Returns an arraylist of arraylists each with an equalish part of the original array.
static int sumArray1(java.util.ArrayList<java.lang.Integer> array)
          Sums the integer values in an array and returns the sum
static double sumArray2(java.util.ArrayList<java.lang.Double> array)
          Adds all the Double values in an array and returns the sum
static boolean withinPercentEquals(double v1, double v2, double percent)
          True if v2 is within given percent of v1 False otherwise
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

angleMinusPiToPi

public static double angleMinusPiToPi(javax.vecmath.Vector2d startVector,
                                      javax.vecmath.Vector2d endVector)

computeAngleAverage

public static double computeAngleAverage(double angleA,
                                         double angleB)

sign

public static double sign(double argument)
Returns the sign of the argument. 1.0 if positive or 0.0, -1.0 if negative. (Unlike Math.signum that returns 0.0 if the argument is 0.0)

Parameters:
argument - double
Returns:
double 1.0 if d >= 0.0, else -1.0

findClosestNinetyDegreeYaw

public static int findClosestNinetyDegreeYaw(double yawInRadians)
Finds the closest 90 degree yaw and returns number of 90 degrees (0 = 0; 1 = 90; 2 = 180; 3 = 270).

Parameters:
yawInRadians - double
Returns:
int between 0 and 3 for the number of 90 degree yawed.

dotPlus

public static int[] dotPlus(int[] array,
                            int addToAllElementsOfA)
Adds parameter 'addToAllElements' to all elements of the integer array and returns the new array

Parameters:
array - int[]
addToAllElementsOfA - int
Returns:
int[]

dotPlus

public static double[] dotPlus(double[] array,
                               double addToAllElementsOfA)
Adds parameter 'addToAllElements' to all elements of the double array and returns the new array

Parameters:
array - double[]
addToAllElementsOfA - double
Returns:
double[]

diff

public static java.util.ArrayList<FrameVector> diff(java.util.ArrayList<FrameVector> array)
Parameters:
array - ArrayList
Returns:
ArrayList

diff

public static double[] diff(double[] array)
Subtracts each element of a double array by the previous element in the array, returns the new array

Parameters:
array - double[]
Returns:
double[]

diffWithAlphaFilter

public static java.util.ArrayList<FrameVector> diffWithAlphaFilter(java.util.ArrayList<FrameVector> array,
                                                                   double alpha,
                                                                   double dt)
Parameters:
array - ArrayList
alpha - double
dt - double
Returns:
ArrayList

computeAngleDifferenceMinusPiToPi

public static double computeAngleDifferenceMinusPiToPi(double angleA,
                                                       double angleB)
computeAngleDifferenceMinusPiToPi: returns (angleA - angleB), where the return value is [-pi, pi)

Parameters:
angleA - double
angleB - double
Returns:
double

computeAngleDifferenceMinusTwoPiToZero

public static double computeAngleDifferenceMinusTwoPiToZero(double angleA,
                                                            double angleB)
computeAngleDifferenceMinusPiToPi: returns (angleA - angleB), where the return value is [-2.0*pi, 0.0)

Parameters:
angleA - double
angleB - double
Returns:
double

shiftAngleToStartOfRange

public static double shiftAngleToStartOfRange(double angleToShift,
                                              double startOfAngleRange)
This will shift an angle to be in the range [startOfAngleRange, (startOfAngleRange + 2*pi)

Parameters:
angleToShift - the angle to shift
startOfAngleRange - start of the range.
Returns:
the shifted angle

generateRandomAngle

public static double generateRandomAngle(java.util.Random random)
Returns an evenly distributed random number between -2PI and 2PI

Parameters:
random - Random number generator
Returns:
number between -2PI and 2PI

generateRandomDoubleInRange

public static double generateRandomDoubleInRange(java.util.Random random,
                                                 double range1,
                                                 double range2)
Returns an evenly distributed random number between two bounds. The bounds do not need to be in min/max order.

Parameters:
random - Random number generator.
range - One side of the bounds.
range2 - Other side of the bounds.
Returns:
Random number between bounds1 and bounds2.

getFirstDerivatives

public static double[] getFirstDerivatives(javax.vecmath.Point2d[] points)

generateRandomPoint3d

public static javax.vecmath.Point3d generateRandomPoint3d(java.util.Random random,
                                                          double[] range1,
                                                          double[] range2)
Returns an evenly distributed random point3d. Each element is between the bounds specified by bounds1 and bounds 2. The bounds do not need to be in a min/max order.

Parameters:
random - Random number generator.
range1 - One side of the bounds for x, y, z.
bounds2 - Other side of the bounds for x, y, z.
Returns:
Point3d

arePointsInOrderColinear

public static boolean arePointsInOrderColinear(javax.vecmath.Point3d startPoint,
                                               javax.vecmath.Point3d middlePoint,
                                               javax.vecmath.Point3d endPoint)
arePointsInOrderColinear: This returns true is: middle point is epsilon close to start or end Otherwise: if the start is EPSILON close to the end, return false if |(start to midle unit vector) dot with (start to end unit vector) - 1| > EPSILON return false else return true

Parameters:
startPoint - Point3d
middlePoint - Point3d
endPoint - Point3d
Returns:
boolean

saveTransform

public static void saveTransform(javax.media.j3d.Transform3D transform3D,
                                 java.io.PrintWriter printWriter)

loadTransform

public static javax.media.j3d.Transform3D loadTransform(java.io.BufferedReader bufferedReader)
                                                 throws java.io.IOException
Throws:
java.io.IOException

getQuaternionFromTransform3D

public static void getQuaternionFromTransform3D(javax.media.j3d.Transform3D transform3D,
                                                javax.vecmath.Quat4d q1)
Places the quaternion equivalent of the normalized rotational component of this transform into the quaternion parameter.

Parameters:
q1 - the quaternion into which the rotation component is placed

epsilonEquals

public static boolean epsilonEquals(double v1,
                                    double v2,
                                    double epsilon)
True if value |(v1-v2)| <= |epsilon| false if not

Parameters:
v1 - double
v2 - double
epsilon - double
Returns:
boolean

withinPercentEquals

public static boolean withinPercentEquals(double v1,
                                          double v2,
                                          double percent)
True if v2 is within given percent of v1 False otherwise

Parameters:
v1 - double
v2 - double
percent - double
Returns:
boolean

findZeroCrossing

public static double findZeroCrossing(MathFunction mathFunction,
                                      double min,
                                      double max,
                                      double tolerance)

clipToMinMax

public static double clipToMinMax(double val,
                                  double min,
                                  double max)
Returns max if max greater than given value Returns min if min less than given value Reutrns value if value is between max and min

Parameters:
val - double
min - double
max - double
Returns:
double

isInsideBounds

public static boolean isInsideBounds(double val,
                                     double min,
                                     double max)
Checks to see if val is Inside Bounds of max and min

Parameters:
val - double
min - double
max - double
Returns:
boolean

sumArray1

public static int sumArray1(java.util.ArrayList<java.lang.Integer> array)
Sums the integer values in an array and returns the sum

Parameters:
array - ArrayList
Returns:
int

sumArray2

public static double sumArray2(java.util.ArrayList<java.lang.Double> array)
Adds all the Double values in an array and returns the sum

Parameters:
array - ArrayList
Returns:
double

min

public static double min(double[] array)
Finds and returns the min value in an array of doubles

Parameters:
array - double[]
Returns:
double

max

public static double max(double[] array)
Finds and returns the max value in an array of Doubles

Parameters:
array - double[]
Returns:
double

mean

public static double mean(double[] array)
Parameters:
array - double[]
Returns:
double

mean

public static double mean(java.util.ArrayList<java.lang.Double> array)
Parameters:
array - ArrayList
Returns:
double

splitArrayIntoEqualishParts

public static java.util.ArrayList<java.util.ArrayList> splitArrayIntoEqualishParts(java.util.ArrayList array,
                                                                                   int numberOfParts)
Returns an arraylist of arraylists each with an equalish part of the original array. The overall ordering of the objects is unchanged.

Parameters:
array - ArrayList
numberOfParts - int
Returns:
ArrayList

getReversedArrayList

public static java.util.ArrayList getReversedArrayList(java.util.ArrayList arrayList)
Returns the Array in Reverse Order

Parameters:
arrayList - ArrayList
Returns:
ArrayList

averageNumbers

public static double averageNumbers(java.util.ArrayList<java.lang.Double> values)

main

public static void main(java.lang.String[] args)