00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHLIBDERIVIMPL_HPP
00025 #define SHLIBDERIVIMPL_HPP
00026
00027 #include "ShLibDeriv.hpp"
00028
00029 namespace SH {
00030
00031 template<int N, typename T>
00032 ShGeneric<N, T> dx(const ShGeneric<N, T>& var)
00033 {
00034 ShAttrib<N, SH_TEMP, T> t;
00035 shDX(t, var);
00036 return t;
00037 }
00038
00039 template<int N, typename T>
00040 ShGeneric<N, T> dy(const ShGeneric<N, T>& var)
00041 {
00042 ShAttrib<N, SH_TEMP, T> t;
00043 shDY(t, var);
00044 return t;
00045 }
00046
00047 template<int N, typename T>
00048 inline
00049 ShGeneric<N, T> fwidth(const ShGeneric<N, T>& var)
00050 {
00051 return max(abs(dx(var)), abs(dy(var)));
00052 }
00053
00054 template<typename T>
00055 inline
00056 ShGeneric<2, T> gradient(const ShGeneric<1, T>& var)
00057 {
00058 return ShAttrib2f(dx(var), dy(var));
00059 }
00060
00061 template<int N, typename T>
00062 ShMatrix<2, N, SH_TEMP, T> jacobian(const ShGeneric<N, T>& var)
00063 {
00064 ShMatrix<2, N, SH_TEMP, T> ret;
00065 ret[0] = dx(var);
00066 ret[1] = dy(var);
00067 return ret;
00068 }
00069
00070
00071
00072 }
00073
00074 #endif