24#ifndef FUT_MATRIXCTH_HPP
25#define FUT_MATRIXCTH_HPP
27#include "FgMatrixC.hpp"
28#include "matrixCT.hpp"
33template <
class T,const
int size>
43 for (uint ii=0; ii<size; ++ii)
44 for (uint jj=0; jj<size; ++jj)
45 m_mat.data[ii][jj] = m.rc(ii,jj);
51 inline T* operator[](
size_t i) {
return m_mat[i]; }
52 inline T
const* operator[](
size_t i)
const {
return m_mat[i]; }
53 inline void setZero() {m_mat.setZero();}
54 inline void setIdentity() {m_mat.setIdentity();}
60 {
return (m_mat == v.m_mat);}
74template<
class T,const
int size>
81 for (row=0; row<size-1; row++) {
82 for (col=0; col<size-1; col++) {
83 m_mat[row][col] = lin[row][col];
85 m_mat[row][size-1] = tran[row][0];
87 m_mat[size-1][size-1] = T(1);
90template <
class T,const
int size>
91inline FutMatrixCTHC<T,size> FutMatrixCTHC<T,size>::operator*(
92 const FutMatrixCTHC& m)
const
94 FutMatrixCTHC<T,size> retval;
95 retval.m_mat = m_mat * m.m_mat;
99template <
class T,const
int size>
100FR2MatrixCTC<T,size-1,1>
101FutMatrixCTHC<T,size>::operator*(
const FR2MatrixCTC<T,size-1,1> & vec)
const
103 FR2MatrixCTC<T,size-1,1> retval;
106 for (row=0; row<size-1; row++) {
108 for (col=0; col<size-1; col++) {
109 acc += m_mat[row][col] * vec[col][0];
111 acc += m_mat[row][size-1];
112 retval[row][0] = acc;
115 for (col=0; col<size-1; col++)
116 acc += m_mat[size-1][col] * vec[col][0];
117 acc += m_mat[size-1][size-1];
119 for (col=0; col<size-1; col++)
120 retval[col][0] /= acc;
130inline FR2Vect3TC<T> operator*(
131 const FutMatrixCTHC<T,4>& mat,
132 const FR2Vect3TC<T>& vec)
134 FR2Vect3TC<T> retval;
135 FR2MatrixCTC<T,3,1> in,
141 retval.x1 = out[0][0];
142 retval.x2 = out[1][0];
143 retval.x3 = out[2][0];
147template <
class T,const
int size>
148std::ostream& operator<<(std::ostream& s,FutMatrixCTHC<T,size> m)
150 for (
int i=0; i<size; i++) {
151 for (
int j=0; j<size; j++) {
152 s << m[i][j] <<
" "; }