+ inline double segLength(double S0, double edgeLen, double minLen )
+ {
+ // PAL10237
+ // S = S0 * f(L/Lmin) where
+ // f(x) = 1 + (7 * 2/Pi * atan(x/5))
+ // =>
+ // S = S0 * ( 1 + 14/PI * atan( L / ( 5 * Lmin )))
+ //
+ // return S0 * ( 1. + a14divPI * atan( edgeLen / ( 5 * minLen )));
+
+ // The above formular gives too short segments when Lmax/Lmin is too high
+ // because by this formular the largest segment is only 8 times longer than the
+ // shortest one ( 2/Pi * atan(x/5) varies within [0,1] ). So a new formular is:
+ //
+ // f(x) = 1 + (x/7 * 2/Pi * atan(x/5))
+ // =>
+ // S = S0 * ( 1 + 2/7/PI * L/Lmin * atan( 5 * L/Lmin ))
+ //
+ const double Lratio = edgeLen / minLen;
+ return S0 * ( 1. + a2div7divPI * Lratio * atan( 5 * Lratio ));
+ }
+#endif