X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctsupport%2Fcubicinterp.cpp;h=fa51f7b47fd52f15ee6a5dcf6c48925922c943cf;hb=2efdad35a3d335dfa84a8576f41588dbd7dd8958;hp=8392dec898d93412c4bcc20758ae4f37fb1f9846;hpb=4c687b64a6e11cc735525f9f65f962b53ba6b595;p=ctsim.git diff --git a/libctsupport/cubicinterp.cpp b/libctsupport/cubicinterp.cpp index 8392dec..fa51f7b 100644 --- a/libctsupport/cubicinterp.cpp +++ b/libctsupport/cubicinterp.cpp @@ -2,7 +2,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: cubicinterp.cpp,v 1.1 2001/02/09 01:54:21 kevin Exp $ +** $Id: cubicinterp.cpp,v 1.3 2001/02/09 14:34:16 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -26,12 +26,17 @@ CubicInterpolator::CubicInterpolator (const double* const y, const int n) : m_pdY(y), m_n(n) { + // Precalculate 2nd derivative of y and put in m_pdY2 + // Calculated by solving set of simultaneous cubic spline equations + // Only n-2 cubic spline equations, but able to make two more + // equations by setting second derivative to 0 at ends + m_pdY2 = new double [n]; - m_pdY2[0] = 0.0; // second deriviative = 0 at beginning and end + m_pdY2[0] = 0; // second deriviative = 0 at beginning and end m_pdY2[n-1] = 0; double* temp = new double [n - 1]; - temp[0] = 0.0 + temp[0] = 0; for (int i = 1; i < n - 1; i++) { double t = 2 + (0.5 * m_pdY2[i-1]); temp[i] = y[i+1] + y[i-1] - y[i] - y[i]; @@ -64,7 +69,7 @@ CubicInterpolator::interpolate (double x) } double loFr = hi - x; - double hiFr = 1 - a; + double hiFr = 1 - loFr; double y = loFr * m_pdY[lo] + hiFr * m_pdY[hi]; y += oneSixth * ((loFr*loFr*loFr - loFr) * m_pdY2[lo] + (hiFr*hiFr*hiFr - hiFr) * m_pdY2[hi]);