/* * slow, non-line, small */ #include "config.h" #include #include "matrix.h" double abs(const vec &a) t_no { return sqrt (a*a); } vec normalize(const vec &a) t_no { double l = 1 / abs (a); return vec(a[0]*l, a[1]*l, a[2]*l); } vec cross(const vec &a, const vec &b) t_no { return vec(a[1]*b[2]-a[2]*b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0]); } mat operator +(const mat &a, const mat &b) t_no { return mat(a[0] + b[0], a[1] + b[1], a[2] + b[2]); } mat operator -(const mat &a, const mat &b) t_no { return mat(a[0] - b[0], a[1] - b[1], a[2] - b[2]); } vec operator *(const mat &a, const vec &b) t_no { return vec(a[0] * b, a[1] * b, a[2] * b); } vec operator *(const vec &a, const mat &b) t_no { return vec(a * b(0), a * b(1), a * b(2)); } mat operator *(const mat &a, const mat &b) t_no { return mat(a[0] * b, a[1] * b, a[2] * b); } ostream &operator <<(ostream &o, const vec &v) t_no { return o << "[ " << v[0] << ", " << v[1] << ", " << v[2] << "]"; } ostream &operator <<(ostream &o, const mat &m) t_no { return o << "[ " << m[0] << ", " << m[1] << ", " << m[2] << "]"; }