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