ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/lsys/matrix.h
Revision: 1.1
Committed: Thu Nov 6 14:31:24 2008 UTC (15 years, 6 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 /*
2     * matrix calculations for non-homogenous space..
3     */
4     #ifndef MATRIX_H
5     #define MATRIX_H
6    
7     #include <iostream>
8    
9     #include "util.h"
10    
11     using namespace std;
12    
13     class vec {
14     double data[3];
15     public:
16     vec() t_no {};
17     vec(double a, double b, double c) t_no
18     { data[0] = a; data[1] = b; data[2] = c; };
19    
20     double &operator [](int idx) t_no { return data[idx]; };
21     const double &operator [](int idx) const t_no { return data[idx]; };
22     };
23    
24     inline bool operator ==(const vec &a, const vec &b) t_no
25     { return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]; }
26    
27     inline vec operator +(const vec &a, const vec &b) t_no
28     { return vec(a[0] + b[0], a[1] + b[1], a[2] + b[2]); }
29    
30     inline vec operator -(const vec &a, const vec &b) t_no
31     { return vec(a[0] - b[0], a[1] - b[1], a[2] - b[2]); }
32    
33     inline double operator *(const vec &a, const vec &b) t_no
34     { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; }
35    
36     inline vec operator *(double s, const vec &a) t_no
37     { return vec(s * a[0], s * a[1], s * a[2]); }
38    
39     double abs(const vec &a) t_no;
40     vec normalize(const vec &a) t_no;
41     vec cross(const vec &a, const vec &b) t_no;
42    
43     class mat {
44     vec data[3];
45     public:
46     mat() t_no {};
47     mat(vec a, vec b, vec c) t_no
48     { data[0] = a; data[1] = b; data[2] = c; };
49    
50     vec &row(int y) t_no { return data[y]; };
51     const vec &row(int y) const t_no { return data[y]; };
52     vec &operator [](int y) t_no { return row(y); };
53     const vec &operator [](int y) const t_no { return row(y); };
54    
55     vec col(int x) t_no { return vec(data[0][x], data[1][x], data[2][x]); };
56     const vec col(int x) const t_no { return vec(data[0][x], data[1][x], data[2][x]); };
57     vec operator ()(int x) t_no { return col(x); };
58     const vec operator ()(int x) const t_no { return col(x); };
59    
60     };
61    
62     mat operator +(const mat &a, const mat &b) t_no;
63     mat operator -(const mat &a, const mat &b) t_no;
64     vec operator *(const mat &a, const vec &b) t_no;
65     vec operator *(const vec &a, const mat &b) t_no;
66     mat operator *(const mat &a, const mat &b) t_no;
67    
68     ostream &operator <<(ostream &o, const vec &v) t_no;
69     ostream &operator <<(ostream &o, const mat &m) t_no;
70    
71     #endif