// ---------------------------------------------------------------- tmatrix<f2polymod_t> f2np_companion_matrix( f2npoly_t chpol) { int n = chpol.find_degree(); f2poly_t m = chpol.get_coeff(0).get_modulus(); f2poly_t zero(0); f2poly_t one(1); f2polymod_t zero_m(zero, m); f2polymod_t one_m(one, m); tmatrix<f2polymod_t> rv(n, n); int i; // chpol = 10011 // 0 0 1 1 // 1 0 0 0 // 0 1 0 0 // 0 0 1 0 rv = zero_m; for (i = 1; i < n; i++) rv[i][i-1] = one_m; for (i = 0; i < n; i++) rv[0][n-1-i] = -chpol.get_coeff(i); return rv; }
inline void matrix_perspective_lh( T (&r)[4][4], T fov_y, T aspect_ratio, T zn, T zf ) { T ys=T(1)/::tanf(fov_y/T(2)); T xs=ys/aspect_ratio; zero_m(r); r[0][0] = xs; r[1][1] = ys; r[2][2] = zf/(zf-zn); r[2][3] = -zn*zf/(zf-zn); r[3][2] = 1; }