code: public double perspectiveFov() {
          /*
           * Compute the angle between the bottom and top frustum plane normals.
           */
          double n1x, n1y, n1z, n2x, n2y, n2z;
          n1x = m03 + m01; n1y = m13 + m11; n1z = m23 + m21; // bottom
          n2x = m01 - m03; n2y = m11 - m13; n2z = m21 - m23; // top
          double n1len = Math.sqrt(n1x * n1x + n1y * n1y + n1z * n1z);
          double n2len = Math.sqrt(n2x * n2x + n2y * n2y + n2z * n2z);
          return Math.acos((n1x * n2x + n1y * n2y + n1z * n2z) / (n1len * n2len));
      }
docs: /* (non-Javadoc)
  @see org.joml.Matrix4dc#perspectiveFov()