2026-07-23 05:27:51 +00:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
#include "vde/curves/bezier_curve.h"
|
|
|
|
|
|
|
|
|
|
using namespace vde::curves;
|
|
|
|
|
|
2026-07-23 10:45:56 +00:00
|
|
|
TEST(BezierTest, LinearEvaluateAtMidpoint) {
|
2026-07-23 05:27:51 +00:00
|
|
|
BezierCurve curve({Point3D(0,0,0), Point3D(2,0,0)});
|
|
|
|
|
Point3D p = curve.evaluate(0.5);
|
|
|
|
|
EXPECT_NEAR(p.x(), 1.0, 1e-6);
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-23 10:45:56 +00:00
|
|
|
TEST(BezierTest, QuadraticEvaluateAtEndpoints) {
|
2026-07-23 05:27:51 +00:00
|
|
|
BezierCurve curve({Point3D(0,0,0), Point3D(1,1,0), Point3D(2,0,0)});
|
2026-07-23 10:45:56 +00:00
|
|
|
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);
|
2026-07-23 05:27:51 +00:00
|
|
|
}
|