You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
1 year ago
|
// This file is part of libigl, a simple c++ geometry processing library.
|
||
|
//
|
||
|
// Copyright (C) 2020 Alec Jacobson <alecjacobson@gmail.com>
|
||
|
//
|
||
|
// This Source Code Form is subject to the terms of the Mozilla Public License
|
||
|
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
||
|
// obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
#include <test_common.h>
|
||
|
#include <igl/fit_cubic_bezier.h>
|
||
|
#include <igl/bezier.h>
|
||
|
#include <igl/PI.h>
|
||
|
|
||
|
TEST_CASE("fit_cubic_bezier: hemicircle", "[igl]")
|
||
|
{
|
||
|
// Create a hemicircle
|
||
|
Eigen::MatrixXd d(101,2);
|
||
|
for(int i=0;i<d.rows();i++)
|
||
|
{
|
||
|
const double th = double(i)/double(d.rows()-1)*igl::PI;
|
||
|
d(i,0) = cos(th);
|
||
|
d(i,1) = sin(th);
|
||
|
}
|
||
|
const double error = 0.000001;
|
||
|
std::vector<Eigen::MatrixXd> cubics;
|
||
|
igl::fit_cubic_bezier(d,error,cubics);
|
||
|
REQUIRE(cubics.size()>1);
|
||
|
REQUIRE(cubics.size()<10);
|
||
|
// Generate a dense sampling
|
||
|
const Eigen::VectorXd T = Eigen::VectorXd::LinSpaced(1000,0,1);
|
||
|
Eigen::MatrixXd X;
|
||
|
igl::bezier(cubics,T,X);
|
||
|
for(int j=0;j<d.rows();j++)
|
||
|
{
|
||
|
const double sd =
|
||
|
((X.rowwise()-d.row(j)).rowwise().squaredNorm()).minCoeff();
|
||
|
REQUIRE(sd < error);
|
||
|
}
|
||
|
}
|