X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2Ftrunk%2FETL%2F_calculus.h;h=45c8ed48960378df1a83a173a9d958fc61f76b47;hb=10607b8897203cd8c6606827e01bb94508645775;hp=279ed9129f7b0e42fe6934c67aa2c5e2f00103ce;hpb=003520b8158176c1509825eef09f46cd417dcc16;p=synfig.git diff --git a/ETL/trunk/ETL/_calculus.h b/ETL/trunk/ETL/_calculus.h index 279ed91..45c8ed4 100644 --- a/ETL/trunk/ETL/_calculus.h +++ b/ETL/trunk/ETL/_calculus.h @@ -4,6 +4,7 @@ ** $Id$ ** ** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -28,6 +29,8 @@ #include +#include "hermite" + /* === M A C R O S ========================================================= */ //#ifndef _EPSILON @@ -56,6 +59,22 @@ public: }; template +class derivative > : public std::unary_function::argument_type,typename hermite::result_type> +{ + hermite func; +public: + explicit derivative(const hermite &x):func(x) { } + + typename hermite::result_type + operator()(const typename hermite::argument_type &x)const + { + T a = func[0], b = func[1], c = func[2], d = func[3]; + typename hermite::argument_type y(1-x); + return ((b-a)*y*y + (c-b)*x*y*2 + (d-c)*x*x) * 3; + } +}; + +template class integral : public std::binary_function { T func;