1 |
root |
1.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 |
|
|
|