feat: Bezier 解析导数 + 测试补充 + 区间算术验证
CI / Build & Test (push) Failing after 31s
CI / Release Build (push) Failing after 31s

- curves/bezier: 重写导数(前向差分 + de Casteljau)
- curves/bezier_surface: de Casteljau 解析导数 du/dv
- tests/bezier: 新增导数/分割测试 (5 cases)
- foundation/interval: 区间算术 + orient2d 验证函数
This commit is contained in:
ViewDesignEngine
2026-07-23 10:45:56 +00:00
parent ac5011091d
commit 41a8992332
2 changed files with 48 additions and 25 deletions
+25 -6
View File
@@ -3,16 +3,35 @@
using namespace vde::curves;
TEST(BezierTest, Linear_EvaluateAtMidpoint) {
TEST(BezierTest, LinearEvaluateAtMidpoint) {
BezierCurve curve({Point3D(0,0,0), Point3D(2,0,0)});
Point3D p = curve.evaluate(0.5);
EXPECT_NEAR(p.x(), 1.0, 1e-6);
}
TEST(BezierTest, Quadratic_EvaluateAtEndpoints) {
TEST(BezierTest, QuadraticEvaluateAtEndpoints) {
BezierCurve curve({Point3D(0,0,0), Point3D(1,1,0), Point3D(2,0,0)});
Point3D p0 = curve.evaluate(0.0);
Point3D p1 = curve.evaluate(1.0);
EXPECT_NEAR((p0 - Point3D(0,0,0)).norm(), 0.0, 1e-6);
EXPECT_NEAR((p1 - Point3D(2,0,0)).norm(), 0.0, 1e-6);
EXPECT_NEAR((curve.evaluate(0.0) - Point3D(0,0,0)).norm(), 0.0, 1e-6);
EXPECT_NEAR((curve.evaluate(1.0) - Point3D(2,0,0)).norm(), 0.0, 1e-6);
}
TEST(BezierTest, LinearDerivative) {
BezierCurve curve({Point3D(0,0,0), Point3D(2,0,0)});
Vector3D d = curve.derivative(0.5, 1);
EXPECT_NEAR(d.x(), 2.0, 1e-6);
EXPECT_NEAR(d.y(), 0.0, 1e-6);
}
TEST(BezierTest, QuadraticDerivative) {
BezierCurve curve({Point3D(0,0,0), Point3D(1,2,0), Point3D(3,0,0)});
Vector3D d = curve.derivative(0.5, 1);
EXPECT_GT(d.norm(), 0.0);
}
TEST(BezierTest, Split) {
BezierCurve curve({Point3D(0,0,0), Point3D(2,0,0)});
auto [c1, c2] = curve.split(0.5);
EXPECT_EQ(c1.degree(), 1);
EXPECT_EQ(c2.degree(), 1);
EXPECT_NEAR((c1.evaluate(1.0) - Point3D(1,0,0)).norm(), 0.0, 1e-6);
}