- scal_t sin_a = scal_sin(theta);
- scal_t cos_a = scal_cos(theta);
- scal_t x2 = x * x;
- scal_t y2 = y * y;
- scal_t z2 = z * z;
- return mat_new(x2+(S(1.0)-x2)*cos_a, x*y*(S(1.0)-cos_a)-z*sin_a, x*z*(S(1.0)-cos_a)+y*sin_a, S(0.0),
- x*y*(S(1.0)-cos_a)+z*sin_a, y2+(S(1.0)-y2)*cos_a, y*z*(S(1.0)-cos_a)-y*sin_a, S(0.0),
- x*z*(S(1.0)-cos_a)-y*sin_a, y*z*(S(1.0)-cos_a)+x*sin_a, z2+(S(1.0)-z2)*cos_a, S(0.0),
+ scal_t c = scal_cos(-theta);
+ scal_t s = scal_sin(-theta);
+ scal_t t = S(1.0) - c;
+ return mat_new(t * x * x + c, t * x * y + s * z, t * x * z - s * y, S(0.0),
+ t * x * y - s * z, t * y * y + c, t * y * z + s * x, S(0.0),
+ t * x * z + s * y, t * y * z - s * x, t * z * z + c, S(0.0),