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