code: public static Vector3D getSteepestVector(final Vector3D normal, final double epsilon) {
          if (Math.abs(normal.getX()) < epsilon && Math.abs(normal.getY()) < epsilon) {
              return new Vector3D(0, 0, 0);
          }
          Vector3D slope;
          if (Math.abs(normal.getX()) < epsilon) {
              slope = new Vector3D(0, 1, -normal.getY() / normal.getZ());
          } else if (Math.abs(normal.getY()) < epsilon) {
              slope = new Vector3D(1, 0, -normal.getX() / normal.getZ());
          } else {
              slope = new Vector3D(normal.getX() / normal.getY(), 1,
                      -1 / normal.getZ() * (normal.getX() * normal.getX() / normal.getY() + normal.getY()));
          }
          //We want the vector to be low-oriented.
          if (slope.getZ() > epsilon) {
              slope = new Vector3D(-slope.getX(), -slope.getY(), -slope.getZ());
          }
          //We normalize it
          return slope.normalize();
      }
docs: Get the vector with the highest down slope in the plan.
  @param normal
  @param epsilon
  @return the steepest vector.