没用他的递归,我直接递推写的,用两个vector记录
在这里插入代码片
void bezier(const std::vector<cv::Point2f> &control_points, cv::Mat &window)
{
// TODO: Iterate through all t = 0 to t = 1 with small steps, and call de Casteljau's
// recursive Bezier algorithm.
for (float t = 0.0; t <= 1.0; t += 0.001)
{
std::vector<cv::Point2f> tmp;
for(int i=0;i<control_points.size();i++)
tmp.push_back(control_points[i]);
std::vector<cv::Point2f> tmp2;
while(tmp.size()>1){
cv::Point2f node1=tmp[0];
cv::Point2f node2;
for(int i = 1;i<tmp.size();i++){
node2 = tmp[i];
tmp2.push_back(node1+(node2-node1)*t);
node1 = node2;
}
tmp = tmp2;
tmp2.clear();
}
std::cout <<tmp[0].x<<" "<< tmp[0].y<<std::endl;
//(要注意在OpenCV中是按BGR的顺序表示的)
window.at<cv::Vec3b>(tmp[0].y, tmp[0].x)[1] = 255;
}
// std::cout<<"2";
}
运行结果(还挺可爱的2333)