in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotation.java [173:213]
public AffineTransformMatrix3D toMatrix() {
final double qw = quat.getW();
final double qx = quat.getX();
final double qy = quat.getY();
final double qz = quat.getZ();
// pre-calculate products that we'll need
final double xx = qx * qx;
final double xy = qx * qy;
final double xz = qx * qz;
final double xw = qx * qw;
final double yy = qy * qy;
final double yz = qy * qz;
final double yw = qy * qw;
final double zz = qz * qz;
final double zw = qz * qw;
final double m00 = 1.0 - (2.0 * (yy + zz));
final double m01 = 2.0 * (xy - zw);
final double m02 = 2.0 * (xz + yw);
final double m03 = 0.0;
final double m10 = 2.0 * (xy + zw);
final double m11 = 1.0 - (2.0 * (xx + zz));
final double m12 = 2.0 * (yz - xw);
final double m13 = 0.0;
final double m20 = 2.0 * (xz - yw);
final double m21 = 2.0 * (yz + xw);
final double m22 = 1.0 - (2.0 * (xx + yy));
final double m23 = 0.0;
return AffineTransformMatrix3D.of(
m00, m01, m02, m03,
m10, m11, m12, m13,
m20, m21, m22, m23
);
}