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