| 1 |
/* |
| 2 |
* slow, non-line, small |
| 3 |
*/ |
| 4 |
|
| 5 |
#include "config.h" |
| 6 |
|
| 7 |
#include <cmath> |
| 8 |
|
| 9 |
#include "matrix.h" |
| 10 |
|
| 11 |
double abs(const vec &a) t_no |
| 12 |
{ return sqrt (a*a); } |
| 13 |
|
| 14 |
vec normalize(const vec &a) t_no |
| 15 |
{ double l = 1 / abs (a); return vec(a[0]*l, a[1]*l, a[2]*l); } |
| 16 |
|
| 17 |
vec cross(const vec &a, const vec &b) t_no |
| 18 |
{ return vec(a[1]*b[2]-a[2]*b[1], |
| 19 |
a[2]*b[0]-a[0]*b[2], |
| 20 |
a[0]*b[1]-a[1]*b[0]); } |
| 21 |
|
| 22 |
mat operator +(const mat &a, const mat &b) t_no |
| 23 |
{ return mat(a[0] + b[0], a[1] + b[1], a[2] + b[2]); } |
| 24 |
|
| 25 |
mat operator -(const mat &a, const mat &b) t_no |
| 26 |
{ return mat(a[0] - b[0], a[1] - b[1], a[2] - b[2]); } |
| 27 |
|
| 28 |
vec operator *(const mat &a, const vec &b) t_no |
| 29 |
{ return vec(a[0] * b, a[1] * b, a[2] * b); } |
| 30 |
|
| 31 |
vec operator *(const vec &a, const mat &b) t_no |
| 32 |
{ return vec(a * b(0), a * b(1), a * b(2)); } |
| 33 |
|
| 34 |
mat operator *(const mat &a, const mat &b) t_no |
| 35 |
{ return mat(a[0] * b, a[1] * b, a[2] * b); } |
| 36 |
|
| 37 |
ostream &operator <<(ostream &o, const vec &v) t_no |
| 38 |
{ |
| 39 |
return o << "[ " << v[0] << ", " |
| 40 |
<< v[1] << ", " |
| 41 |
<< v[2] << "]"; |
| 42 |
} |
| 43 |
|
| 44 |
ostream &operator <<(ostream &o, const mat &m) t_no |
| 45 |
{ |
| 46 |
return o << "[ " << m[0] << ", " |
| 47 |
<< m[1] << ", " |
| 48 |
<< m[2] << "]"; |
| 49 |
} |
| 50 |
|