JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
Matrix< T > Class Template Reference

#include <Matrix++.h>

Public Member Functions

 Matrix ()
 
 Matrix (int nn,...)
 
virtual ~Matrix ()
 関数にコピー渡しした場合に,関数内でディストラクトされても良い様に free() は使用しない.
 
void init ()
 
void init (int nn,...)
 
void getm (int nn, int *size)
 
Telement (int i,...)
 
void clear (T v=T(0))
 
void dup (Matrix< T > a)
 
void free ()
 free() は手動で呼び出す.
 

Public Attributes

int n
 次元数
 
int r
 全要素数 sz[0]*sz[1]*...*sz[n-1]
 
int d
 汎用
 
int * sz
 各次元の要素数 sz[0] 〜 sz[n-1]
 
Tmx
 要素 mx[0] 〜 mx[r-1]
 
T err
 エラー時にこれを参照用として返す.
 

Detailed Description

template<typename T = double>
class jbxl::Matrix< T >

template <typename T=double>> class Matrix

多次元マトリックス型 Matrix
  • 注: Matrix型の引数は (行, 列, ....)となるので,直接メモリにアクセスする場合は注意が必要である.
  • 2次元(3x3)の場合...., (1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), ....
  • 3次元(2x2x2)の場合... (1,1,1), (1,1,2), (1,2,1), (1,2,2), (2,1,1), ....

Definition at line 28 of file Matrix++.h.

Constructor & Destructor Documentation

◆ Matrix() [1/2]

template<typename T = double>
Matrix ( )
inline

Definition at line 39 of file Matrix++.h.

39{ init();}
void init()
Definition Matrix++.h:43

References Matrix< T >::init().

Here is the call graph for this function:

◆ Matrix() [2/2]

template<typename T >
Matrix ( int nn,
... )

template <typename T> Matrix<T>::Matrix(int nn, ...)

コンストラクタ

Parameters
nnマトリックスの次元数.
...各次元の要素数.
int * sz
各次元の要素数 sz[0] 〜 sz[n-1]
Definition Matrix++.h:34

Definition at line 71 of file Matrix++.h.

72{
73 r = 0;
74 n = nn;
75 d = 0;
76 err = (T)0;
77 mx = NULL;
78 sz = (int*)malloc(n*sizeof(int));
79 if (sz==NULL) return;
80 memset(sz, 0, n*sizeof(int));
81
83
84 va_start(argsptr, nn);
85 r = 1;
86 for (int i=0; i<n; i++) {
87 sz[i] = (int)va_arg(argsptr, int);
88 r = r*sz[i];
89 }
91
92 mx = (T*)malloc(r*sizeof(T));
93 if (mx==NULL) {
94 ::free(sz);
95 sz = NULL;
96 return;
97 }
98 for (int i=0; i<r; i++) mx[i] = (T)0;
99
100 return;
101}
int d
汎用
Definition Matrix++.h:33
int n
次元数
Definition Matrix++.h:31
T err
エラー時にこれを参照用として返す.
Definition Matrix++.h:36
void free()
free() は手動で呼び出す.
Definition Matrix++.h:52
T * mx
要素 mx[0] 〜 mx[r-1]
Definition Matrix++.h:35
int r
全要素数 sz[0]*sz[1]*...*sz[n-1]
Definition Matrix++.h:32

◆ ~Matrix()

template<typename T = double>
virtual ~Matrix ( )
inlinevirtual

Definition at line 41 of file Matrix++.h.

Member Function Documentation

◆ clear()

template<typename T = double>
void clear ( T v = T(0))
inline

Definition at line 48 of file Matrix++.h.

48{ for(int i=0;i<r;i++) mx[i]=v;}

References Matrix< T >::mx, Matrix< T >::r, and Matrix< T >::sz.

◆ dup()

template<typename T = double>
void dup ( Matrix< T > a)
inline

Definition at line 49 of file Matrix++.h.

49{ *this = dup_Matrix(a);}
Matrix< T > dup_Matrix(Matrix< T > a)
Definition Matrix++.h:250

References jbxl::dup_Matrix(), and Matrix< T >::sz.

Here is the call graph for this function:

◆ element()

template<typename T >
T & element ( int i,
... )

template <typename T> T& Matrix<T>::element(int i, ...)

Matrix の要素を返す.次元数に制限はない.インデックスは1から数える(0からではない).

参考
1次元配列へのアクセスインデックス
1次元: element(i) (i-1)
2次元: element(i,j) (j-1) + sz[1]*(i-1)
3次元: element(i,j,k) (k-1) + sz[2]*(j-1) + sz[1]*sz[2]*(i-1)
4次元: element(i,j,k,l) (l-1) + sz[3]*(k-1) + sz[2]*sz[3]*(j-1) + sz[1]*sz[2]*sz[3]*(i-1)
...................
T & element(int i,...)
Definition Matrix++.h:204

Definition at line 204 of file Matrix++.h.

205{
206 int* args;
208
209 args = (int*)malloc(n*sizeof(int));
210 if (args==NULL) return err;
211
213 args[0] = i;
214 for (int m=1; m<n; m++) {
215 args[m] = (int)va_arg(argsptr, int);
216 }
218
219 int dx = args[0] - 1;
220 for (int d=1; d<n; d++) dx = dx*sz[d] + args[d] - 1;
221 ::free(args);
222
223 if (dx>=r || dx<0) return err;
224 return mx[dx];
225}

Referenced by AffineTrans< T >::computeComponents(), AffineTrans< T >::computeMatrix(), jbxl::ExtEulerXYZ2RotMatrix(), jbxl::ExtEulerXZY2RotMatrix(), jbxl::ExtEulerYXZ2RotMatrix(), jbxl::ExtEulerYZX2RotMatrix(), jbxl::ExtEulerZXY2RotMatrix(), jbxl::ExtEulerZYX2RotMatrix(), AffineTrans< T >::getInverseAffine(), AffineTrans< T >::getRotationMatrix(), Quaternion< T >::getRotMatrix(), jbxl::RotMatrix2ExtEulerXYZ(), jbxl::RotMatrix2ExtEulerXZY(), jbxl::RotMatrix2ExtEulerYXZ(), jbxl::RotMatrix2ExtEulerYZX(), jbxl::RotMatrix2ExtEulerZXY(), and jbxl::RotMatrix2ExtEulerZYX().

Here is the caller graph for this function:

◆ free()

◆ getm()

template<typename T >
void getm ( int nn,
int * size )

template <typename T> void Matrix<T>::getm(int nn, int* size)

現在のバッファ部をクリアして,任意(n)次元の実数マトリックスのバッファ部をつくり出す.
要素自体は (T)0に初期化される.init() とは引数の形が違うだけ

Parameters
nnマトリックスの次元数.
sizesize[0]〜size[nn-1]: 各次元の要素数.

Definition at line 157 of file Matrix++.h.

158{
159 if (size==NULL) return;
160 if (sz!=NULL) ::free(sz);
161 if (mx!=NULL) ::free(mx);
162
163 r = 0;
164 n = nn;
165 d = 0;
166 err = (T)0;
167 mx = NULL;
168 sz = (int*)malloc(n*sizeof(int));
169 if (sz==NULL) return;
170
171 r = 1;
172 for (int i=0; i<n; i++) {
173 sz[i] = size[i];
174 r = r*sz[i];
175 }
176
177 mx = (T*)malloc(r*sizeof(T));
178 if (mx==NULL) {
179 ::free(sz);
180 sz = NULL;
181 return;
182 }
183 for (int i=0; i<r; i++) mx[i] = (T)0;
184
185 return;
186}

Referenced by jbxl::dup_Matrix(), jbxl::operator*(), jbxl::operator+(), and jbxl::operator-().

Here is the caller graph for this function:

◆ init() [1/2]

template<typename T = double>
void init ( )
inline

Definition at line 43 of file Matrix++.h.

43{ n = r = d = 0; err = (T)0; sz = NULL; mx = NULL;}

References Matrix< T >::d, Matrix< T >::err, Matrix< T >::mx, Matrix< T >::n, Matrix< T >::r, and Matrix< T >::sz.

Referenced by Matrix< T >::free(), AffineTrans< T >::getRotationMatrix(), and Matrix< T >::Matrix().

Here is the caller graph for this function:

◆ init() [2/2]

template<typename T >
void init ( int nn,
... )

template <typename T> void Matrix<T>::init(int nn, ...)

現在のバッファ部をクリアして,任意(n)次元の実数マトリックスのバッファ部をつくり出す.
要素自体は (T)0に初期化される.現在のバッファ部をクリアする以外は,コンストラクタと同じ.

Parameters
nnマトリックスの次元数.
...各次元の要素数.

Definition at line 113 of file Matrix++.h.

114{
115 if (sz!=NULL) ::free(sz);
116 if (mx!=NULL) ::free(mx);
117
118 r = 0;
119 n = nn;
120 d = 0;
121 err = (T)0;
122 mx = NULL;
123 sz = (int*)malloc(n*sizeof(int));
124 if (sz==NULL) return;
125
127
128 va_start(argsptr, nn);
129 r = 1;
130 for (int i=0; i<n; i++) {
131 sz[i] = (int)va_arg(argsptr, int);
132 r = r*sz[i];
133 }
135
136 mx = (T*)malloc(r*sizeof(T));
137 if (mx==NULL) {
138 ::free(sz);
139 sz = NULL;
140 return;
141 }
142 for (int i=0; i<r; i++) mx[i] = (T)0;
143
144 return;
145}

Member Data Documentation

◆ d

template<typename T = double>
int d

Definition at line 33 of file Matrix++.h.

Referenced by jbxl::dup_Matrix(), and Matrix< T >::init().

◆ err

template<typename T = double>
T err

Definition at line 36 of file Matrix++.h.

Referenced by jbxl::dup_Matrix(), and Matrix< T >::init().

◆ mx

◆ n

◆ r

◆ sz


The documentation for this class was generated from the following file: