MCPcopy Create free account
hub / github.com/BIMCoderLiang/LNLib / TEST

Function TEST

tests/T_Fitting.cpp:15–76  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13using namespace LNLib;
14
15TEST(Test_Fitting, Interpolation)
16{
17 {
18 int degree = 3;
19 std::vector<XYZ> Q = { XYZ(0,0,0),XYZ(3,4,0),XYZ(-1,4,0),XYZ(-4,0,0),XYZ(-4,-3,0) };
20 auto params = Interpolation::GetChordParameterization(Q);
21 auto result = Interpolation::AverageKnotVector(degree, params);
22 EXPECT_TRUE(MathUtils::IsAlmostEqualTo(result[4], 28.0/51));
23 }
24
25 {
26 int degree = 3;
27 std::vector<XYZ> Q = { XYZ(0,0,0),XYZ(3,4,0),XYZ(-1,4,0),XYZ(-4,0,0),XYZ(-4,-3,0) };
28
29 LN_NurbsCurve curve;
30 NurbsCurve::GlobalInterpolation(degree, Q, curve);
31 auto cps = curve.ControlPoints;
32 EXPECT_TRUE(cps.size() == Q.size());
33 EXPECT_TRUE(cps[0].ToXYZ(true).IsAlmostEqualTo(Q[0]));
34 EXPECT_TRUE(cps[4].ToXYZ(true).IsAlmostEqualTo(Q[4]));
35 }
36 {
37 int degree = 3;
38 std::vector<XYZ> Q =
39 {
40 {282.9136, 219.7436, 0}, {323.8285, 216.8496, 0}, {359.7841, 219.0878, 0},
41 {390.926, 225.7011, 0}, {417.4904, 235.9736, 0}, {439.7787, 249.2801, 0},
42 {458.0961, 265.1101, 0}, {472.6844, 283.0457, 0}, {483.6853, 302.7034, 0},
43 {491.1519, 323.6775, 0}, {495.0864, 345.5107, 0}, {495.4815, 367.6969, 0},
44 {492.3456, 389.7038, 0}, {485.7093, 411.0023, 0}, {475.6128, 431.0941, 0},
45 {462.0758, 449.5273, 0}, {445.0582, 465.8904, 0}, {424.4307, 479.7753, 0}
46 };
47
48 LN_NurbsCurve curve;
49 NurbsCurve::GlobalInterpolation(degree, Q, curve);
50 NurbsCurve::Check(curve);
51 }
52 {
53 int degree = 3;
54 std::vector<XYZ> Q = { XYZ(100,0,0),XYZ(0,100,0),XYZ(-100,0,0),XYZ(0,-100,0)};
55 std::vector<XYZ> T = { XYZ(0,1,0),XYZ(-1,0,0),XYZ(0,-1,0),XYZ(1,0,0)};
56
57 LN_NurbsCurve curve;
58 NurbsCurve::GlobalInterpolation(degree, Q, T, 1, curve);
59 XYZ C0 = NurbsCurve::GetPointOnCurve(curve, 0.0);
60 EXPECT_TRUE(C0.IsAlmostEqualTo(XYZ(100, 0, 0)));
61 XYZ C1 = NurbsCurve::GetPointOnCurve(curve, 1.0);
62 EXPECT_TRUE(C1.IsAlmostEqualTo(XYZ(0, -100, 0)));
63 }
64
65 {
66 std::vector<XYZ> Q = { XYZ(0,0,0),XYZ(3,4,0),XYZ(-1,4,0),XYZ(-4,0,0),XYZ(-4,-3,0) };
67
68 LN_NurbsCurve curve;
69 bool result = NurbsCurve::CubicLocalInterpolation(Q, curve);
70 EXPECT_TRUE(result);
71
72 auto cps = curve.ControlPoints;

Callers

nothing calls this directly

Calls 5

GetPointOnCurveFunction · 0.85
XYZClass · 0.50
CheckFunction · 0.50
IsAlmostEqualToMethod · 0.45
ToXYZMethod · 0.45

Tested by

no test coverage detected