/**
 * Trieda rozsirujuca triedu Path o implementaciu interface Integrable
 * Cesta (Path) reprezentovana retiazkou bodov v rovine (x,y) je interpretovana ako
 * zadanie funkcie y(x), pricom tato funkcia je reprezentovana linearnou
 * interpolaciou medzi bodmi retiazky
 */
public class IntegrablePath
    extends Path implements Integrable {
    /**
     * Spojita funkcia premennej x reprezentovana retiazkou bodov
     * point this.p[]. Vnutri retiazky sa medzi bodmi linearne interpoluje
     * extrapolacia pred lavy a za pravy okraj je realizovana konstantnou funkciou
     * @param x double nezavisle premenna
     * @return double hodnota interpolovanej funkcie
     */
    public double fcn(double x) {
    if (x < this.p[0].x) {
      return p[0].y;
    }
    if (x >= this.p[n - 1].x) {
      return p[n - 1].y;
    }
    int i;
    for (i = 1; i < n; i++) {
      if (x < p[i].x) {
        break;
      }
    }
    return (p[i - 1].y +
            (p[i].y - p[i - 1].y) / (p[i].x - p[i - 1].x) * (x - p[i - 1].x));
  }
}
