MPU6050のサンプルプログラム2

Dependencies:   ConfigFile SDFileSystem mbed

Fork of LAURUS_program by LAURUS

Committer:
taurin
Date:
Mon Dec 07 02:11:56 2015 +0000
Revision:
36:94dc027e05cd
Parent:
23:79cdc1432160
MPU?HMC??????ver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ojan 3:5358a691a100 1 #pragma once
ojan 23:79cdc1432160 2 #include "mbed.h"
ojan 3:5358a691a100 3
ojan 3:5358a691a100 4 class Matrix
ojan 3:5358a691a100 5 {
ojan 3:5358a691a100 6 public:
ojan 3:5358a691a100 7 /********** コンストラクタ デストラクタ **********/
ojan 3:5358a691a100 8 Matrix(int row, int col);
ojan 3:5358a691a100 9 Matrix(int row, int col, float* comps);
ojan 3:5358a691a100 10 ~Matrix();
ojan 3:5358a691a100 11 Matrix(const Matrix& m);
ojan 3:5358a691a100 12
ojan 3:5358a691a100 13 /********** メンバ演算子 **********/
ojan 3:5358a691a100 14 Matrix operator-() const;
ojan 3:5358a691a100 15 Matrix& operator=(const Matrix& m);
ojan 3:5358a691a100 16 Matrix& operator+=(const Matrix& m);
ojan 3:5358a691a100 17 Matrix& operator-=(const Matrix& m);
ojan 3:5358a691a100 18 //Matrix& operator*=(const Matrix& m);
ojan 3:5358a691a100 19 Matrix& operator*=(float c);
ojan 3:5358a691a100 20 Matrix& operator/=(float c);
ojan 3:5358a691a100 21
ojan 3:5358a691a100 22 /********** その他関数 **********/
ojan 3:5358a691a100 23 /*
ojan 3:5358a691a100 24 行列の成分を設定
ojan 3:5358a691a100 25 引数:rowNo 行番号
ojan 3:5358a691a100 26 colNo 列番号
ojan 3:5358a691a100 27 val 設定値
ojan 3:5358a691a100 28 */
ojan 3:5358a691a100 29 void SetComp(int rowNo, int colNo, float val);
ojan 3:5358a691a100 30
ojan 3:5358a691a100 31 /*
ojan 3:5358a691a100 32 行列の成分を全て設定。全成分を一度に指定する必要がある。
ojan 3:5358a691a100 33 引数:pComps 設定値の入ったfloat配列。
ojan 3:5358a691a100 34 */
ojan 3:5358a691a100 35 void SetComps(float* pComps);
ojan 3:5358a691a100 36 /*
ojan 3:5358a691a100 37 行列式を計算する。行列が正方行列で無い場合にはエラー。
ojan 3:5358a691a100 38 */
ojan 3:5358a691a100 39 float Determinant() const;
ojan 3:5358a691a100 40
ojan 3:5358a691a100 41 /*
ojan 3:5358a691a100 42 行列式を計算する。行列が正方行列で無い場合にはエラー。
ojan 3:5358a691a100 43 */
ojan 3:5358a691a100 44 float det() const;
ojan 3:5358a691a100 45
ojan 3:5358a691a100 46 /*
ojan 3:5358a691a100 47 行列をLU分解する
ojan 3:5358a691a100 48 引数:sign (省略可)置換操作の符号を格納するポインタ
ojan 3:5358a691a100 49 p (省略可)置換行列を格納する行列のポインタ。(分解する行列と同じ列数の正方行列)
ojan 3:5358a691a100 50 返り値:LU分解後の行列。下三角要素がL、対角・上三角要素がUに対応する。
ojan 3:5358a691a100 51 */
ojan 3:5358a691a100 52 Matrix LU_Decompose(int* sign = 0, Matrix * p = 0) const;
ojan 3:5358a691a100 53
ojan 3:5358a691a100 54 /*
ojan 3:5358a691a100 55 逆行列を生成する
ojan 3:5358a691a100 56 返り値で逆行列が存在するか否かを判断
ojan 3:5358a691a100 57 引数:逆行列を格納する行列
ojan 3:5358a691a100 58 返り値:逆行列が存在するか否か
ojan 3:5358a691a100 59 */
ojan 3:5358a691a100 60 float Inverse(Matrix& invm) const;
ojan 3:5358a691a100 61
ojan 3:5358a691a100 62 /*
ojan 3:5358a691a100 63 転置行列を生成する
ojan 3:5358a691a100 64 返り値:転置行列
ojan 3:5358a691a100 65 */
ojan 3:5358a691a100 66 Matrix Transpose() const;
ojan 3:5358a691a100 67
ojan 3:5358a691a100 68 /*
ojan 3:5358a691a100 69 行列の行の入れ替えを行う
ojan 3:5358a691a100 70 引数:rowNo1 行番号1
ojan 3:5358a691a100 71 rowNo2 行番号2
ojan 3:5358a691a100 72 */
ojan 3:5358a691a100 73 void SwapRow(int rowNo1, int rowNo2);
ojan 3:5358a691a100 74 /*
ojan 3:5358a691a100 75 行列の列の入れ替えを行う
ojan 3:5358a691a100 76 引数:colNo1 列番号1
ojan 3:5358a691a100 77 colNo2 列番号2
ojan 3:5358a691a100 78 */
ojan 3:5358a691a100 79 void SwapCol(int colNo1, int colNo2);
ojan 3:5358a691a100 80
ojan 3:5358a691a100 81 /********** インライン関数 **********/
ojan 3:5358a691a100 82 inline int GetRow() const {
ojan 3:5358a691a100 83 return row;
ojan 3:5358a691a100 84 }
ojan 3:5358a691a100 85
ojan 3:5358a691a100 86 inline int GetCol() const {
ojan 3:5358a691a100 87 return col;
ojan 3:5358a691a100 88 }
ojan 3:5358a691a100 89
ojan 3:5358a691a100 90 inline const float* GetpComponents() const {
ojan 3:5358a691a100 91 return (const float*)components;
ojan 3:5358a691a100 92 }
ojan 3:5358a691a100 93
ojan 3:5358a691a100 94 inline float GetComp(int rowNo, int colNo) const {
ojan 23:79cdc1432160 95 if (rowNo > row || colNo > col) error("Index Out of Bounds Error !!");
ojan 3:5358a691a100 96 return components[(rowNo-1)*col + (colNo-1)];
ojan 3:5358a691a100 97 }
ojan 3:5358a691a100 98
ojan 3:5358a691a100 99 private:
ojan 3:5358a691a100 100 int row;
ojan 3:5358a691a100 101 int col;
ojan 3:5358a691a100 102 float* components;
ojan 3:5358a691a100 103
ojan 3:5358a691a100 104 /*
ojan 3:5358a691a100 105 行列の成分の中で無視できるほど小さい値を0と置き換える(掃除する)
ojan 3:5358a691a100 106 */
ojan 3:5358a691a100 107 void CleanUp();
ojan 3:5358a691a100 108
ojan 3:5358a691a100 109 };
ojan 3:5358a691a100 110
ojan 3:5358a691a100 111 // グローバル演算子
ojan 3:5358a691a100 112 Matrix operator+(const Matrix& lhm, const Matrix& rhm);
ojan 3:5358a691a100 113 Matrix operator-(const Matrix& lhm, const Matrix& rhm);
ojan 3:5358a691a100 114 Matrix operator*(const Matrix& lhm, const Matrix& rhm);
ojan 3:5358a691a100 115