18e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
28e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// Copyright 2006-2007 Adobe Systems Incorporated
38e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// All Rights Reserved.
48e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener//
58e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// NOTICE:  Adobe permits you to use, modify, and distribute this file in
68e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it.
78e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
88e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
98e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_spline.h#1 $ */
108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */
118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Change: 832332 $ */
128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Author: tknoll $ */
138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#ifndef __dng_spline__
178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#define __dng_spline__
188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_1d_function.h"
228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_memory.h"
238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include <vector>
258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
288e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline real64 EvaluateSplineSegment (real64 x,
298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener								     real64 x0,
308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener								     real64 y0,
318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener								     real64 s0,
328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener								     real64 x1,
338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener								     real64 y1,
348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener								     real64 s1)
358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	{
368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	real64 A = x1 - x0;
388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	real64 B = (x - x0) / A;
408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	real64 C = (x1 - x) / A;
428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	real64 D = ((y0 * (2.0 - C + B) + (s0 * A * B)) * (C * C)) +
448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			   ((y1 * (2.0 - B + C) - (s1 * A * C)) * (B * B));
458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	return D;
478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	}
498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
528e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_spline_solver: public dng_1d_function
538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	{
548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	protected:
568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_std_vector<real64> X;
588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_std_vector<real64> Y;
598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_std_vector<real64> S;
618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	public:
638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_spline_solver ();
658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		virtual ~dng_spline_solver ();
678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		void Reset ();
698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		void Add (real64 x, real64 y);
718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		virtual void Solve ();
738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		virtual bool IsIdentity () const;
758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		virtual real64 Evaluate (real64 x) const;
778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	};
798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#endif
838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
85