Lines Matching refs:len
57 static void generate_bezier(Point b[], Point const d[], double const u[], unsigned len,
60 Point const data[], double const u[], unsigned len,
63 Point const data[], double const u[], unsigned len);
64 static void reparameterize(Point const d[], unsigned len, double u[], Point const bezCurve[]);
67 static Point darray_right_tangent(Point const d[], unsigned const len);
69 static void chord_length_parameterize(Point const d[], double u[], unsigned len);
70 static double compute_max_error_ratio(Point const d[], double const u[], unsigned len,
109 bezier_fit_cubic(Point *bezier, Point const *data, int len, double error)
111 return bezier_fit_cubic_r(bezier, data, len, error, 1);
124 bezier_fit_cubic_r(Point bezier[], Point const data[], int const len, double const error, unsigned const max_beziers)
128 len <= 0 ||
132 Point *uniqued_data = new Point[len];
133 unsigned uniqued_len = copy_without_nans_or_adjacent_duplicates(data, len, uniqued_data);
193 Point const data[], int const len,
199 !(len > 0) ||
204 if ( len < 2 ) return 0;
206 if ( len == 2 ) {
209 bezier[3] = data[len - 1];
231 double *u = new double[len];
232 chord_length_parameterize(data, u, len);
233 if ( u[len - 1] == 0.0 ) {
243 generate_bezier(bezier, data, u, len, tHat1, tHat2, error);
244 reparameterize(data, len, u, bezier);
248 double maxErrorRatio = compute_max_error_ratio(data, u, len, bezier, tolerance, &splitPoint);
260 generate_bezier(bezier, data, u, len, tHat1, tHat2, error);
261 reparameterize(data, len, u, bezier);
262 maxErrorRatio = compute_max_error_ratio(data, u, len, bezier, tolerance, &splitPoint);
275 assert(splitPoint < unsigned(len));
281 return bezier_fit_cubic_full(bezier, split_points, data, len, unconstrained_tangent, tHat2,
284 } else if (splitPoint == unsigned(len - 1)) {
289 return bezier_fit_cubic_full(bezier, split_points, data, len, tHat1, unconstrained_tangent,
303 if(!(0 < splitPoint && splitPoint < unsigned(len - 1)))
308 recTHat2 = darray_center_tangent(data, splitPoint, len);
328 data + splitPoint, len - splitPoint,
361 Point const data[], double const u[], unsigned const len,
368 ? darray_left_tangent(data, len, tolerance_sq)
371 ? darray_right_tangent(data, len, tolerance_sq)
373 estimate_lengths(bezier, data, u, len, est_tHat1, est_tHat2);
377 estimate_bi(bezier, 1, data, u, len);
381 estimate_lengths(bezier, data, u, len, est_tHat1, est_tHat2);
388 Point const data[], double const uPrime[], unsigned const len,
405 bezier[3] = data[len - 1];
407 for (unsigned i = 0; i < len; i++) {
476 alpha_l = alpha_r = distance(data[0], data[len-1]) / 3.0;
493 Point const data[], double const u[], unsigned const len)
500 for (unsigned i = 0; i < len; ++i) {
534 * \param len Number of values in both d and u arrays.
539 unsigned const len,
543 assert( 2 <= len );
545 unsigned const last = len - 1;
703 * \pre (2 \<= len) and (d[0] != d[1]).
706 darray_left_tangent(Point const d[], unsigned const len)
708 assert( len >= 2 );
719 * \pre 2 \<= len.
720 * \pre d[len - 1] != d[len - 2].
724 darray_right_tangent(Point const d[], unsigned const len)
726 assert( 2 <= len );
727 unsigned const last = len - 1;
739 * \pre 2 \<= len.
745 darray_left_tangent(Point const d[], unsigned const len, double const tolerance_sq)
747 assert( 2 <= len );
757 if (i == len) {
759 ? darray_left_tangent(d, len)
771 * \pre 2 \<= len.
772 * \pre d[len - 1] != d[len - 2].
776 darray_right_tangent(Point const d[], unsigned const len, double const tolerance_sq)
778 assert( 2 <= len );
780 unsigned const last = len - 1;
790 ? darray_right_tangent(d, len)
803 * \pre (0 \< center \< len - 1) and d is uniqued (at least in
809 unsigned const len)
812 assert( center < len - 1 );
830 * \pre Parameter array u must have space for \a len items.
833 chord_length_parameterize(Point const d[], double u[], unsigned const len)
835 if(!( 2 <= len ))
840 for (unsigned i = 1; i < len; i++) {
846 double tot_len = u[len - 1];
850 for (unsigned i = 1; i < len; ++i) {
855 for (unsigned i = 1; i < len; ++i) {
856 u[i] = i / (double) ( len - 1 );
861 * It's been reported that u[len - 1] can differ from 1.0 on some
865 if (u[len - 1] != 1) {
866 double const diff = u[len - 1] - 1;
869 //g_warning("u[len - 1] = %19g (= 1 + %19g), expecting exactly 1",
870 // u[len - 1], diff);
872 u[len - 1] = 1;
876 assert( u[0] == 0.0 && u[len - 1] == 1.0 );
877 for (unsigned i = 1; i < len; i++) {
890 * \pre 2 \<= len.
892 * \pre u[len - 1] == 1.0.
894 * || ((*splitPoint \< len - 1)
898 compute_max_error_ratio(Point const d[], double const u[], unsigned const len,
902 assert( 2 <= len );
903 unsigned const last = len - 1;