| 13 | using namespace LNLib; |
| 14 | |
| 15 | TEST(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; |
nothing calls this directly
no test coverage detected