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.
63 lines
2.1 KiB
63 lines
2.1 KiB
#include "medusa/bits/domains/cad_helpers.hpp"
|
|
#include "medusa/bits/types/Vec.hpp"
|
|
#include "medusa/bits/types/Range_fwd.hpp"
|
|
#include <cmath>
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace mm {
|
|
namespace cad_helpers {
|
|
|
|
TEST(DomainEngines, B_splineEvaluate) {
|
|
int p = 2;
|
|
Range<double> knots({0, 0, 0, 1, 2, 3, 3, 4, 4, 4});
|
|
Range<Vec2d> cp({Vec2d(0, 1), Vec2d(1, 1), Vec2d(3, 4),
|
|
Vec2d(4, 2), Vec2d(5, 3), Vec2d(6, 4), Vec2d(7, 3)});
|
|
|
|
Vec2d pt = evaluate_b_spline(2.4, p, cp, knots, 4);
|
|
EXPECT_LT((pt - Vec2d(3.98, 2.52)).norm(), 1e-15);
|
|
|
|
pt = evaluate_b_spline(1.2, p, cp, knots, 3);
|
|
EXPECT_LT((pt - Vec2d(2.38, 3)).norm(), 1e-15);
|
|
|
|
pt = evaluate_b_spline(0.4, p, cp, knots);
|
|
EXPECT_LT((pt - Vec2d(0.8, 1.24)).norm(), 1e-15);
|
|
|
|
pt = evaluate_b_spline(3.9, p, cp, knots);
|
|
EXPECT_LT((pt - Vec2d(6.8, 3.18)).norm(), 1e-15);
|
|
|
|
pt = evaluate_b_spline(0.0, p, cp, knots);
|
|
EXPECT_LT((pt - Vec2d(0, 1)).norm(), 1e-15);
|
|
|
|
pt = evaluate_b_spline(4.0, p, cp, knots);
|
|
EXPECT_LT((pt - Vec2d(7, 3)).norm(), 1e-15);
|
|
}
|
|
|
|
TEST(DomainEngines, B_splineDerivative) {
|
|
int p = 2;
|
|
Range<double> knots({0, 0, 0, 1, 2, 3, 3, 4, 4, 4});
|
|
Range<Vec2d> cp({Vec2d(0, 1), Vec2d(1, 1), Vec2d(3, 4),
|
|
Vec2d(4, 2), Vec2d(5, 3), Vec2d(6, 4), Vec2d(7, 3)});
|
|
|
|
Range<double> d_knots;
|
|
Range<Vec2d> d_cp;
|
|
cad_helpers::generate_b_spline_derivative(p, cp, knots, d_cp, d_knots);
|
|
|
|
Vec2d pt = cad_helpers::evaluate_b_spline(3.5, p - 1, d_cp, d_knots);
|
|
EXPECT_LT((pt - Vec2d(2, 0)).norm(), 1e-15);
|
|
|
|
pt = cad_helpers::evaluate_b_spline(0.0, p - 1, d_cp, d_knots);
|
|
EXPECT_LT((pt - Vec2d(2, 0)).norm(), 1e-15);
|
|
|
|
pt = cad_helpers::evaluate_b_spline(1.5, p - 1, d_cp, d_knots);
|
|
EXPECT_LT((pt - Vec2d(1.5, 0.5)).norm(), 1e-15);
|
|
|
|
pt = cad_helpers::evaluate_b_spline(4.0, p - 1, d_cp, d_knots);
|
|
EXPECT_LT((pt - Vec2d(2, -2)).norm(), 1e-15);
|
|
|
|
pt = cad_helpers::evaluate_b_spline(2.5, p - 1, d_cp, d_knots);
|
|
EXPECT_LT((pt - Vec2d(1.5, 0)).norm(), 1e-15);
|
|
}
|
|
|
|
} // namespace cad_helpers
|
|
} // namespace mm
|
|
|