use from Ernesto Palacios

Dependents:   RoboticArm DXL_SDK_Porting_Test

Fork of Matrix by Ernesto Palacios

Committer:
stanley1228
Date:
Fri Mar 31 09:10:27 2017 +0800
Revision:
9:f19d5d6c3468
Parent:
8:1774aa06ab99
no

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stanley1228 8:1774aa06ab99 1 /**
stanley1228 8:1774aa06ab99 2 * @brief Version 0.9
stanley1228 8:1774aa06ab99 3 * @file MatrixMath.h
stanley1228 8:1774aa06ab99 4 * @author Ernesto Palacios
stanley1228 8:1774aa06ab99 5 *
stanley1228 8:1774aa06ab99 6 * Created on 15 de septiembre de 2011, 09:44 AM.
stanley1228 8:1774aa06ab99 7 *
stanley1228 8:1774aa06ab99 8 * Develop Under GPL v3.0 License
stanley1228 8:1774aa06ab99 9 * http://www.gnu.org/licenses/gpl-3.0.html
stanley1228 8:1774aa06ab99 10 *
stanley1228 8:1774aa06ab99 11 */
stanley1228 8:1774aa06ab99 12
stanley1228 8:1774aa06ab99 13 #ifndef MATRIXMATH_H
stanley1228 8:1774aa06ab99 14 #define MATRIXMATH_H
stanley1228 8:1774aa06ab99 15
stanley1228 8:1774aa06ab99 16 //#include "mbed.h"
stanley1228 8:1774aa06ab99 17 #include "Matrix.h"
stanley1228 8:1774aa06ab99 18
stanley1228 8:1774aa06ab99 19
stanley1228 8:1774aa06ab99 20 /**
stanley1228 8:1774aa06ab99 21 * @brief This class provides STATIC methods to perform operations
stanley1228 8:1774aa06ab99 22 * over Matrix Objects, version 0.9.
stanley1228 8:1774aa06ab99 23 */
stanley1228 8:1774aa06ab99 24 class MatrixMath{
stanley1228 8:1774aa06ab99 25 public:
stanley1228 8:1774aa06ab99 26
stanley1228 8:1774aa06ab99 27
stanley1228 8:1774aa06ab99 28 /**@brief
stanley1228 8:1774aa06ab99 29 * Transposes Matrix, return new Object.
stanley1228 8:1774aa06ab99 30 * @param Mat matrix to calculate
stanley1228 8:1774aa06ab99 31 * @return Transposed Matrix
stanley1228 8:1774aa06ab99 32 */
stanley1228 8:1774aa06ab99 33 static Matrix Transpose( const Matrix& Mat );
stanley1228 8:1774aa06ab99 34
stanley1228 8:1774aa06ab99 35
stanley1228 8:1774aa06ab99 36 /**@brief
stanley1228 8:1774aa06ab99 37 * Calculate the inverse of a [n,n] Matrix BUT you check first if
stanley1228 8:1774aa06ab99 38 * the determinant is != 0, Same matrix will be return if Det( Mat ) == 0.
stanley1228 8:1774aa06ab99 39 * @param Mat matrix to calcute inverse.
stanley1228 8:1774aa06ab99 40 * @return Matrix Inverse
stanley1228 8:1774aa06ab99 41 */
stanley1228 8:1774aa06ab99 42 static Matrix Inv( const Matrix& Mat );
stanley1228 8:1774aa06ab99 43
stanley1228 8:1774aa06ab99 44
stanley1228 8:1774aa06ab99 45 /**@brief
stanley1228 8:1774aa06ab99 46 * Creates an identity [n,n] Matrix
stanley1228 8:1774aa06ab99 47 * @param Rows Number of Rowns and Columns
stanley1228 8:1774aa06ab99 48 * @return Identity Matrix of dimensions [Rows,Rows]
stanley1228 8:1774aa06ab99 49 */
stanley1228 8:1774aa06ab99 50 static Matrix Eye( int Rows );
stanley1228 8:1774aa06ab99 51
stanley1228 8:1774aa06ab99 52
stanley1228 8:1774aa06ab99 53 /**@brief
stanley1228 8:1774aa06ab99 54 * Returns the dot Product of any two same leght vectors.
stanley1228 8:1774aa06ab99 55 * In this case a vector is defined as a [1,n] or [n,1] Matrix.
stanley1228 8:1774aa06ab99 56 * Very Flexible Function.
stanley1228 8:1774aa06ab99 57 * @param leftM First Vector
stanley1228 8:1774aa06ab99 58 * @param rightM Second Vector
stanley1228 8:1774aa06ab99 59 * @return Dot Product or Scalar Product.
stanley1228 8:1774aa06ab99 60 */
stanley1228 8:1774aa06ab99 61 static float dot( const Matrix& leftM, const Matrix& rightM );
stanley1228 8:1774aa06ab99 62
stanley1228 8:1774aa06ab99 63
stanley1228 8:1774aa06ab99 64 /**@brief Calculates the determinant of a Matrix.
stanley1228 8:1774aa06ab99 65 * @param Mat matrix to calculate.
stanley1228 8:1774aa06ab99 66 * @return the determinant.
stanley1228 8:1774aa06ab99 67 */
stanley1228 8:1774aa06ab99 68 static float det( const Matrix& Mat );
stanley1228 8:1774aa06ab99 69
stanley1228 8:1774aa06ab99 70
stanley1228 8:1774aa06ab99 71 //==== For Kinematics ====//
stanley1228 8:1774aa06ab99 72
stanley1228 8:1774aa06ab99 73 /**@brief
stanley1228 8:1774aa06ab99 74 * Calculates the Rotation Matrix Transform along 'x' axis in radians.
stanley1228 8:1774aa06ab99 75 * @param radians rotation angle.
stanley1228 8:1774aa06ab99 76 * @return Rotation Matrix[4,4] along 'x' axis.
stanley1228 8:1774aa06ab99 77 */
stanley1228 8:1774aa06ab99 78 static Matrix RotX( float radians );
stanley1228 8:1774aa06ab99 79
stanley1228 8:1774aa06ab99 80
stanley1228 8:1774aa06ab99 81 /**@brief
stanley1228 8:1774aa06ab99 82 * Calculates the Rotation Matrix Transform along 'y' axis in radians.
stanley1228 8:1774aa06ab99 83 * @param radians rotation angle.
stanley1228 8:1774aa06ab99 84 * @return Rotation Matrix[4,4] along 'y' axis.
stanley1228 8:1774aa06ab99 85 */
stanley1228 8:1774aa06ab99 86 static Matrix RotY( float radians );
stanley1228 8:1774aa06ab99 87
stanley1228 8:1774aa06ab99 88
stanley1228 8:1774aa06ab99 89 /**@brief
stanley1228 8:1774aa06ab99 90 * Calculates the Rotation Matrix Transform along 'z' axis in radians.
stanley1228 8:1774aa06ab99 91 * @param radians rotation angle.
stanley1228 8:1774aa06ab99 92 * @return Rotation Matrix[4,4] along 'z' axis.
stanley1228 8:1774aa06ab99 93 */
stanley1228 8:1774aa06ab99 94 static Matrix RotZ( float radians );
stanley1228 8:1774aa06ab99 95
stanley1228 8:1774aa06ab99 96
stanley1228 8:1774aa06ab99 97 static Matrix Tz( float d );
stanley1228 8:1774aa06ab99 98
stanley1228 8:1774aa06ab99 99
stanley1228 8:1774aa06ab99 100 /**@brief
stanley1228 8:1774aa06ab99 101 * Calculates the Translation Matrix to coordenates (x' y' z').
stanley1228 8:1774aa06ab99 102 * @param x axis translation
stanley1228 8:1774aa06ab99 103 * @param y axis translation
stanley1228 8:1774aa06ab99 104 * @param z axis translation
stanley1228 8:1774aa06ab99 105 * @return Translation Matrix[4,4] x'y'z'.
stanley1228 8:1774aa06ab99 106 */
stanley1228 8:1774aa06ab99 107 static Matrix Transl( float x, float y, float z );
stanley1228 8:1774aa06ab99 108
stanley1228 8:1774aa06ab99 109
stanley1228 8:1774aa06ab99 110 //cross stanley
stanley1228 8:1774aa06ab99 111 static Matrix cross(const Matrix& leftM,const Matrix& rightM);
stanley1228 8:1774aa06ab99 112
stanley1228 8:1774aa06ab99 113
stanley1228 8:1774aa06ab99 114 private:
stanley1228 8:1774aa06ab99 115
stanley1228 8:1774aa06ab99 116 /**@brief
stanley1228 8:1774aa06ab99 117 * Calculates the Determinant of a 3x3 Matrix
stanley1228 8:1774aa06ab99 118 * @param Mat Already made sure is a 3 by 3
stanley1228 8:1774aa06ab99 119 * @return Float, determinant.
stanley1228 8:1774aa06ab99 120 */
stanley1228 8:1774aa06ab99 121 float Det3x3( const Matrix& Mat );
stanley1228 8:1774aa06ab99 122
stanley1228 8:1774aa06ab99 123 };
stanley1228 8:1774aa06ab99 124
stanley1228 8:1774aa06ab99 125 #endif /* MATRIXMATH_H */