27 #include "WMPickingDVRHelper.h"
29 namespace PickingDVRHelper
38 void calculateDerivativesWYSIWYP(
const std::vector<double>& values,
39 std::vector<double>& vecFirstDerivative,
40 std::vector<double>& vecSecondDerivative )
43 unsigned int n = values.size();
45 double coeff = 1.0 / 12.0;
48 for(
unsigned int j = 0; j < n; j++ )
53 deriv = coeff * ( -25 * values[j]
61 deriv = coeff * ( -3 * values[j-1]
71 deriv = coeff * ( 25 * values[j]
79 deriv = coeff * ( +3 * values[j+1]
89 deriv = coeff * ( -1 * values[j+2]
95 vecFirstDerivative.push_back( deriv );
99 for(
unsigned int j = 0; j < n; j++ )
104 deriv = coeff * ( -25 * vecFirstDerivative[j]
105 + 48 * vecFirstDerivative[j+1]
106 - 36 * vecFirstDerivative[j+2]
107 + 16 * vecFirstDerivative[j+3]
108 - 3 * vecFirstDerivative[j+4] );
112 deriv = coeff * ( -3 * vecFirstDerivative[j-1]
113 - 10 * vecFirstDerivative[j]
114 + 18 * vecFirstDerivative[j+1]
115 - 6 * vecFirstDerivative[j+2]
116 + 1 * vecFirstDerivative[j+3] );
120 else if( j == n - 1 )
122 deriv = coeff * ( 25 * vecFirstDerivative[j]
123 - 48 * vecFirstDerivative[j-1]
124 + 36 * vecFirstDerivative[j-2]
125 - 16 * vecFirstDerivative[j-3]
126 + 3 * vecFirstDerivative[j-4] );
128 else if( j == n - 2 )
130 deriv = coeff * ( +3 * vecFirstDerivative[j+1]
131 + 10 * vecFirstDerivative[j]
132 - 18 * vecFirstDerivative[j-1]
133 + 6 * vecFirstDerivative[j-2]
134 - 1 * vecFirstDerivative[j-3] );
140 deriv = coeff * ( -1 * vecFirstDerivative[j+2]
141 + 8 * vecFirstDerivative[j+1]
142 - 8 * vecFirstDerivative[j-1]
143 + 1 * vecFirstDerivative[j-2] );
146 vecSecondDerivative.push_back( deriv );