static Matrix<double, 4, 4> _make_matrix( int x_axis, int y_axis, int z_axis ) { typedef Vector<double, 3> V3d; V3d x = (x_axis<0) ? -V3d::Unit(-x_axis) : V3d::Unit(x_axis); V3d y = (y_axis<0) ? -V3d::Unit(-y_axis) : V3d::Unit(y_axis); V3d z = (z_axis<0) ? -V3d::Unit(-z_axis) : V3d::Unit(z_axis); return Matrix<double, 4, 4>( x.x(), x.y(), x.z(), 0, y.x(), y.y(), y.z(), 0, z.x(), z.y(), z.z(), 0, 0, 0, 0, 1 ); }