code: @Override
      public double membership(double x) {
          if (Double.isNaN(x)) {
              return Double.NaN;
          }
  
          if (Op.isLE(x, start)) {
              return height * 0.0;
          } else if (Op.isLE(x, 0.5 * (start + end))) {
              return height * 2.0 * Math.pow((x - start) / (end - start), 2);
          } else if (Op.isLt(x, end)) {
              return height * (1.0 - 2.0 * Math.pow((x - end) / (end - start), 2));
          }
  
          return height * 1.0;
      }
docs: Computes the membership function evaluated at `x`
  
  @param x
  @return `\begin{cases} 0h & \mbox{if $x \leq s$} \cr h(2 \left((x - s) /
  (e-s)\right)^2) & \mbox{if $x \leq 0.5(s+e)$}\cr h(1 - 2\left((x - e) /
  (e-s)\right)^2) & \mbox{if $x < e$}\cr 1h & \mbox{otherwise} \end{cases}`
  
  where `h` is the height of the Term, `s` is the start of the
  SShape, `e` is the end of the SShape.