递归绘制贝塞尔曲线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cv::Point2f recursive_bezier(const std::vector<cv::Point2f> &control_points, float t) 
{
if (control_points.size() == 1)
{
return control_points[0];
}
else
{
std::vector<cv::Point2f> points;
for (int i = 0; i < control_points.size()-1; i++)
{
cv::Point2f p;
p.x = (1-t) * control_points[i].x + t * control_points[i + 1].x;
p.y = (1-t) * control_points[i].y + t * control_points[i + 1].y;
points.push_back(p);
}
return recursive_bezier(points, t);
}
}

void bezier(const std::vector<cv::Point2f> &control_points, cv::Mat &window)
{
for (float t = 0; t <= 1; t += 0.0001)
{
//调用递归贝塞尔曲线计算函数,计算曲线上的点坐标
cv::Point2f point=recursive_bezier(control_points,t);
window.at<cv::Vec3b>(point.y, point.x)[1] = 255;
}
}