MatrixD.rotateAngle constructor
Implementation
factory MatrixD.rotateAngle(Vector3D axis, double angle) {
double x = axis.x, y = axis.y, z = axis.z;
final lengthSquared = x*x + y*y + z*z;
if ((lengthSquared != 1.0) && (lengthSquared != 0.0))
{
final ilength = 1.0/math.sqrt(lengthSquared);
x *= ilength;
y *= ilength;
z *= ilength;
}
final sinres = math.sin(angle);
final cosres = math.cos(angle);
final t = 1.0 - cosres;
MatrixD result = .zero();
result.m0 = x*x*t + cosres;
result.m1 = y*x*t + z*sinres;
result.m2 = z*x*t - y*sinres;
result.m4 = x*y*t - z*sinres;
result.m5 = y*y*t + cosres;
result.m6 = z*y*t + x*sinres;
result.m8 = x*z*t + y*sinres;
result.m9 = y*z*t - x*sinres;
result.m10 = z*z*t + cosres;
result.m15 = 1.0;
return result;
}