code: public Matrix4f set(Quaterniondc q) {
          double w2 = q.w() * q.w();
          double x2 = q.x() * q.x();
          double y2 = q.y() * q.y();
          double z2 = q.z() * q.z();
          double zw = q.z() * q.w();
          double xy = q.x() * q.y();
          double xz = q.x() * q.z();
          double yw = q.y() * q.w();
          double yz = q.y() * q.z();
          double xw = q.x() * q.w();
          _m00((float) (w2 + x2 - z2 - y2));
          _m01((float) (xy + zw + zw + xy));
          _m02((float) (xz - yw + xz - yw));
          _m03(0.0f);
          _m10((float) (-zw + xy - zw + xy));
          _m11((float) (y2 - z2 + w2 - x2));
          _m12((float) (yz + yz + xw + xw));
          _m13(0.0f);
          _m20((float) (yw + xz + xz + yw));
          _m21((float) (yz + yz - xw - xw));
          _m22((float) (z2 - y2 - x2 + w2));
          _m30(0.0f);
          _m31(0.0f);
          _m32(0.0f);
          _m33(1.0f);
          this._properties(PROPERTY_AFFINE | PROPERTY_ORTHONORMAL);
          return this;
      }
docs: Set this matrix to be equivalent to the rotation specified by the given {@link Quaterniondc}.
  <p>
  Reference: <a href="http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToMatrix/">http://www.euclideanspace.com/</a>
  
  @param q
  the {@link Quaterniondc}
  @return this