16 #include "Foundation/Matrix3.h"
17 #include "Foundation/vec3.h"
20 MATRIX3_INLINE Matrix3::Matrix3()
31 MATRIX3_INLINE Matrix3::Matrix3(
const Vec3& V1,
const Vec3& V2,
const Vec3& V3)
45 MATRIX3_INLINE Matrix3::Matrix3(
const double a[3][3])
58 MATRIX3_INLINE Matrix3::Matrix3(
const Matrix3& rhs)
69 MATRIX3_INLINE Matrix3::~Matrix3()
78 return m[0][0]*(m[1][1]*m[2][2]-m[1][2]*m[2][1])+
79 m[0][1]*(m[1][2]*m[2][0]-m[1][0]*m[2][2])+
80 m[0][2]*(m[1][0]*m[2][1]-m[1][1]*m[2][0]);
126 MATRIX3_INLINE
Vec3 Matrix3::operator *(
const Vec3& V)
const
128 double x=m[0][0]*V.data[0]+m[0][1]*V.data[1]+m[0][2]*V.data[2];
129 double y=m[1][0]*V.data[0]+m[1][1]*V.data[1]+m[1][2]*V.data[2];
130 double z=m[2][0]*V.data[0]+m[2][1]*V.data[1]+m[2][2]*V.data[2];
136 MATRIX3_INLINE
Matrix3 Matrix3::operator *(
double d)
const
140 res.m[0][0]=m[0][0]*d;
141 res.m[0][1]=m[0][1]*d;
142 res.m[0][2]=m[0][2]*d;
143 res.m[1][0]=m[1][0]*d;
144 res.m[1][1]=m[1][1]*d;
145 res.m[1][2]=m[1][2]*d;
146 res.m[2][0]=m[2][0]*d;
147 res.m[2][1]=m[2][1]*d;
148 res.m[2][2]=m[2][2]*d;
154 MATRIX3_INLINE
Matrix3 Matrix3::operator /(
double d)
const
158 res.m[0][0]=m[0][0]/d;
159 res.m[0][1]=m[0][1]/d;
160 res.m[0][2]=m[0][2]/d;
161 res.m[1][0]=m[1][0]/d;
162 res.m[1][1]=m[1][1]/d;
163 res.m[1][2]=m[1][2]/d;
164 res.m[2][0]=m[2][0]/d;
165 res.m[2][1]=m[2][1]/d;
166 res.m[2][2]=m[2][2]/d;
173 for(
int i = 0; i < 3; i++) {
174 for(
int j = 0; j < 3; j++) {
175 m[i][j] = other.m[i][j];
181 MATRIX3_INLINE
bool Matrix3::operator==(
const Matrix3 &other)
const
183 for(
int i = 0; i < 3; i++) {
184 for(
int j = 0; j < 3; j++) {
185 if (m[i][j] != other.m[i][j]) {
193 MATRIX3_INLINE std::ostream &operator<<(std::ostream &oStream,
const Matrix3 &m)
196 for(
int i = 1; i < 9; i++) {
197 oStream <<
" " << m(i/3, i%3);
203 MATRIX3_INLINE
Matrix3 Matrix3::operator *(
const Matrix3& rhs)
const
207 for(
int i=0;i<3;i++){
208 for(
int j=0;j<3;j++){
209 res.m[i][j]=m[i][0]*rhs.m[0][j]+m[i][1]*rhs.m[1][j]+m[i][2]*rhs.m[2][j];
218 for(
int i=0;i<3;i++){
219 for(
int j=0;j<3;j++){
220 m[i][j]=m[i][j]+rhs.m[i][j];
233 for(
int i=0;i<3;i++){
234 for(
int j=0;j<3;j++){
235 res.m[i][j]=m[i][j]+rhs.m[i][j];
249 for(
int i=0;i<3;i++) {
250 for(
int j=0;j<3;j++) {
251 res.m[i][j]=m[i][j]-rhs.m[i][j];
263 return m[0][0]+m[1][1]+m[2][2];
273 for(
int i=0;i<3;i++){
274 for(
int j=0;j<3;j++){
275 res+=m[i][j]*m[i][j];
315 for(
int i=0;i<3;i++){
316 for(
int j=0;j<3;j++){
317 res.m[i][j]=d*M.m[i][j];
326 #endif // __MATRIX3_HPP