#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
// A、B 是曲线的起点和终点
// mid 是曲线的中间控制点(注意曲线并不经过此点,只是将该点作为中间的控制点)
// n 插值点个数
// result 返回Bezier曲线插值后的点集
bool generate_bezier_curve(Kernel::Point_3 A, Kernel::Point_3 B,
Kernel::Point_3 mid, int n, std::vector<Kernel::Point_3>& result)
{
for (int i = 0; i < n; i++)
{
double t = i / (double)n;
double s1 = (1 - t) * (1 - t);
double s2 = 2 * (1 - t) * t;
double s3 = t * t;
Kernel::Point_3 pt(s1 * A.x() + s2 * mid.x() + s3 * B.x(),
s1 * A.y() + s2 * mid.y() + s3 * B.y(),
s1 * A.z() + s2 * mid.z() + s3 * B.z());
result.push_back(pt);
}
return true;
}
三点生成Bezier曲线
最新推荐文章于 2025-05-09 22:36:54 发布