/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2008 - 2009, Geomatys * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotoolkit.math; /** * Table avec interpolations linéaires. Notez que la classe <code>Polynomial1D</code> peut * faire le même travail lorsque construit avec l'argument 2, mais cette classe-ci sera * plus rapide. * * @version 1.0 * @author Martin Desruisseaux * * @see Polynomial1D * @see Spline1D * @module */ public class Linear1D extends Search1D { /** * Renvoie la donnée <var>y</var> interpolée linéairement au <var>xi</var> spécifié. * Les index <code>klo</code> et <code>khi</code> doivent avoir été trouvés avant * l'appel de cette méthode. * * @param xi valeur de <var>x</var> pour laquelle on désire une * valeur <var>y</var> interpolée. * @param reUseIndex <code>true</code> s'il faut réutiliser les même * index que ceux de la dernière interpolation. * @return Valeur <var>y</var> interpolée. */ @Override protected double interpolate(final double xi, final boolean reUseIndex) throws ExtrapolationException { if (ignoreYNaN && !reUseIndex) { validateIndex(y); } if (khi != klo) { final double yklo = y[klo]; final double xklo = x[klo]; final double ykhi = y[khi]; final double xkhi = x[khi]; final double step = xkhi - xklo; final double evo = ykhi - yklo; final double a = evo/step; final double x = xi - xklo; final double b = yklo; return a * x + b; } else { return y[khi]; } } /** * Interpole les NaN trouvés dans le vecteur des <var>y</var>, en les remplaçant directement * dans le vecteur des <var>y</var> sans créer de vecteur temporaire. Voyez la description de * la méthode de la classe de base pour plus de détails. * * @param dxStart Plage minimal des <var>x</var> qu'il doit y avoir de chaque côté d'un NaN pour l'interpoler. * @param dxStop Plage maximal des <var>x</var> couvert par les données manquantes pour qu'elles puissent être interpolées. * @return Le tableau des <var>y</var>. */ @Override public double[] interpolateNaN(final double dxStart, final double dxStop) { return interpolateNaN(dxStart, dxStop, y); } }