13 #ifndef explicit_bezier_curve_fit_test_suite_hpp
14 #define explicit_bezier_curve_fit_test_suite_hpp
30 template<
typename data__>
80 void octave_print(
int figno,
const std::vector<point_type, Eigen::aligned_allocator<point_type> > &pts,
const curve_type &bez)
const
84 std::cout <<
"figure(" << figno <<
");" << std::endl;
85 std::cout <<
"xpts=[" << pts[0].x();
86 for (i=1; i<pts.size(); ++i)
87 std::cout <<
", " << pts[i].x();
88 std::cout <<
"];" << std::endl;
89 std::cout <<
"ypts=[" << pts[0].y();
90 for (i=1; i<pts.size(); ++i)
91 std::cout <<
", " << pts[i].y();
92 std::cout <<
"];" << std::endl;
94 std::vector<data_type> t(101);
95 for (i=0; i<t.size(); ++i)
96 t[i]=static_cast<data_type>(i)/(t.size()-1);
98 std::cout <<
"xint=[" << bez.
f(t[0])(0);
99 for (i=1; i<t.size(); ++i)
100 std::cout <<
", " << bez.
f(t[i])(0);
101 std::cout <<
"];" << std::endl;
102 std::cout <<
"yint=[" << bez.
f(t[0])(1);
103 for (i=1; i<t.size(); ++i)
104 std::cout <<
", " << bez.
f(t[i])(1);
105 std::cout <<
"];" << std::endl;
107 std::cout <<
"plot(xpts, ypts, 'bo', xint, yint, 'k-');" << std::endl;
110 void create_circle(std::vector<point_type, Eigen::aligned_allocator<point_type> > &pts)
114 for (
size_t i=0; i<n; ++i)
117 pts[i](0)=(1-std::cos(theta))/2;
118 pts[i](1)=std::sin(theta);
124 fit_container_type fcon;
126 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(10);
128 std::vector<data_type> t;
129 data_type err_out, err_ref;
138 err_out=ebez.
fit(t, fcon, deg);
141 for (err_ref=0, i=0; i<pts.size(); ++i)
146 TEST_ASSERT(err_ref==err_out);
147 TEST_ASSERT(err_out < 0.430);
150 TEST_ASSERT(pts[0]!=ebez.
f(t[0]));
151 TEST_ASSERT(pts[pts.size()-1]!=ebez.
f(t[t.size()-1]));
158 data_type eps(std::numeric_limits<data__>::epsilon());
159 fit_container_type fcon;
161 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(10);
163 std::vector<data_type> t;
164 data_type err_out, err_ref;
175 err_out=ebez.
fit(t, fcon, deg);
178 for (err_ref=0, i=0; i<pts.size(); ++i)
183 TEST_ASSERT(err_out==err_ref);
184 TEST_ASSERT(err_out < 0.431);
187 TEST_ASSERT(pts[0]==ebez.
f(t[0]));
188 TEST_ASSERT((pts[pts.size()-1]-ebez.
f(t[t.size()-1])).norm()<65*eps);
195 data_type eps(std::numeric_limits<data__>::epsilon());
196 fit_container_type fcon;
198 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(10);
200 std::vector<data_type> t;
201 data_type err_out, err_ref;
217 err_out=ebez.
fit(t, fcon, deg);
220 for (err_ref=0, i=0; i<pts.size(); ++i)
225 TEST_ASSERT(err_out==err_ref);
226 TEST_ASSERT(err_out < 0.682);
229 TEST_ASSERT(pts[0]==ebez.
f(t[0]));
230 TEST_ASSERT((pts[pts.size()-1]-ebez.
f(t[t.size()-1])).norm()<40*eps);
231 TEST_ASSERT((pts[4]-ebez.
f(t[4])).norm()<35*eps);
232 TEST_ASSERT((fp-ebez.
fp(t[4])).norm()<48*eps);
239 data_type eps(std::numeric_limits<data__>::epsilon());
240 fit_container_type fcon;
242 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(10);
244 std::vector<data_type> t;
245 data_type err_out, err_ref;
262 err_out=ebez.
fit(t, fcon, deg);
265 for (err_ref=0, i=0; i<pts.size(); ++i)
270 TEST_ASSERT(err_out==err_ref);
271 TEST_ASSERT(err_out < 0.310);
274 TEST_ASSERT((pts[0]-ebez.
f(t[0])).norm()<6*eps);
275 TEST_ASSERT((pts[pts.size()-1]-ebez.
f(t[t.size()-1])).norm()<512*eps);
276 TEST_ASSERT((pts[4]-ebez.
f(t[4])).norm()<35*eps);
277 TEST_ASSERT((fp-ebez.
fp(t[4])).norm()<240*eps);
278 TEST_ASSERT((fpp-ebez.
fpp(t[4])).norm()<1.54e3*eps);
285 data_type eps(std::numeric_limits<data__>::epsilon());
288 fit_container_type fcon;
289 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
291 std::vector<data_type> t;
302 TEST_ASSERT(static_cast<size_t>(ebez.
degree()+1)==pts.size());
305 TEST_ASSERT(ebez.
f(t[0])==pts[0]);
306 TEST_ASSERT((ebez.
f(t[1])-pts[1]).norm()<3*eps);
307 TEST_ASSERT((ebez.
f(t[2])-pts[2]).norm()<7*eps);
308 TEST_ASSERT((ebez.
f(t[3])-pts[3]).norm()<23*eps);
315 fit_container_type fcon;
316 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
318 std::vector<data_type> t;
334 TEST_ASSERT(static_cast<size_t>(ebez.
degree()+1)==(pts.size()+1));
337 TEST_ASSERT((ebez.
f(t[0])-pts[0]).norm()<2*eps);
338 TEST_ASSERT((ebez.
f(t[1])-pts[1]).norm()<3*eps);
339 TEST_ASSERT((ebez.
f(t[2])-pts[2]).norm()<9*eps);
340 TEST_ASSERT((ebez.
f(t[3])-pts[3]).norm()<44*eps);
341 TEST_ASSERT((fp-ebez.
fp(t[1])).norm()<48*eps);
348 fit_container_type fcon;
349 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
351 std::vector<data_type> t;
368 TEST_ASSERT(static_cast<size_t>(ebez.
degree()+1)==(pts.size()+2));
371 TEST_ASSERT((ebez.
f(t[0])-pts[0]).norm()<3*eps);
372 TEST_ASSERT((ebez.
f(t[1])-pts[1]).norm()<3*eps);
373 TEST_ASSERT((ebez.
f(t[2])-pts[2]).norm()<9*eps);
374 TEST_ASSERT((ebez.
f(t[3])-pts[3]).norm()<70*eps);
375 TEST_ASSERT((fp-ebez.
fp(t[1])).norm()<48*eps);
376 TEST_ASSERT((fpp-ebez.
fpp(t[1])).norm()<81*eps);
eli::geom::curve::explicit_bezier< data__ > curve_type
Definition: explicit_bezier_curve_fit_test_suite.hpp:34
curve_type::point_type point_type
Definition: explicit_bezier_curve_fit_test_suite.hpp:36
point_type f(const data_type &t) const
Definition: explicit_bezier.hpp:100
Derived1__::Scalar distance(const Eigen::MatrixBase< Derived1__ > &p1, const Eigen::MatrixBase< Derived2__ > &p2)
Definition: distance.hpp:33
curve_type::index_type index_type
Definition: explicit_bezier.hpp:42
void AddTests(const double &)
Definition: explicit_bezier_curve_fit_test_suite.hpp:51
void fit_C0_ends_test()
Definition: explicit_bezier_curve_fit_test_suite.hpp:156
curve_type::data_type data_type
Definition: explicit_bezier.hpp:39
point_type fpp(const data_type &t) const
Definition: explicit_bezier.hpp:114
error_code add_C2_constraint(const index_type &i)
Definition: fit_container.hpp:611
Definition: explicit_bezier_curve_fit_test_suite.hpp:31
Definition: fit_container.hpp:34
explicit_bezier_curve_fit_test_suite()
Definition: explicit_bezier_curve_fit_test_suite.hpp:71
Definition: explicit_bezier.hpp:32
curve_type::control_point_type control_point_type
Definition: explicit_bezier_curve_fit_test_suite.hpp:35
curve_type::data_type data_type
Definition: explicit_bezier_curve_fit_test_suite.hpp:37
error_code add_start_C0_constraint()
Definition: fit_container.hpp:502
data_type fit(const fit_container_type &fcon, const index_type °_in)
Definition: explicit_bezier.hpp:154
error_code add_end_C0_constraint()
Definition: fit_container.hpp:532
error_code get_constraint(const index_type &i, constraint_info &ci) const
Definition: fit_container.hpp:476
void octave_print(int figno, const std::vector< point_type, Eigen::aligned_allocator< point_type > > &pts, const curve_type &bez) const
Definition: explicit_bezier_curve_fit_test_suite.hpp:80
point_type get_fpp() const
Definition: fit_container.hpp:87
curve_type::fit_container_type fit_container_type
Definition: explicit_bezier_curve_fit_test_suite.hpp:39
void fit_free_ends_test()
Definition: explicit_bezier_curve_fit_test_suite.hpp:122
curve_type::point_type control_point_type
Definition: explicit_bezier.hpp:41
error_code add_C1_constraint(const index_type &i)
Definition: fit_container.hpp:575
void AddTests(const float &)
Definition: explicit_bezier_curve_fit_test_suite.hpp:42
curve_type::index_type index_type
Definition: explicit_bezier_curve_fit_test_suite.hpp:38
index_type degree() const
Definition: explicit_bezier.hpp:80
void AddTests(const long double &)
Definition: explicit_bezier_curve_fit_test_suite.hpp:60
point_type get_fp() const
Definition: fit_container.hpp:86
point_type fp(const data_type &t) const
Definition: explicit_bezier.hpp:107
void fit_C1_ends_test()
Definition: explicit_bezier_curve_fit_test_suite.hpp:193
Eigen::Matrix< data_type, 1, 2 > point_type
Definition: explicit_bezier.hpp:40
void interpolate(const fit_container_type &fcon)
Definition: explicit_bezier.hpp:284
void create_circle(std::vector< point_type, Eigen::aligned_allocator< point_type > > &pts)
Definition: explicit_bezier_curve_fit_test_suite.hpp:110
Definition: fit_container.hpp:50
void fit_C2_ends_test()
Definition: explicit_bezier_curve_fit_test_suite.hpp:237
~explicit_bezier_curve_fit_test_suite()
Definition: explicit_bezier_curve_fit_test_suite.hpp:75
void set_points(it__ itb, it__ ite)
Definition: fit_container.hpp:444
void interpolate_test()
Definition: explicit_bezier_curve_fit_test_suite.hpp:283