Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 recursive_bezier函数的递归实现返回值的疑问

Viewing 1 reply thread
  • Author
    Posts
    • #4632 Score: 0
      .J.
      Participant

      我这里设计该函数对自身递归调用,最终返回一个曲线上的值,即递归调用最终的的停止条件为:

      if (control_points.size() == 1)
      {
          std::cout << control_points[0].x << " " << control_points[0].y << std::endl;
          return control_points[0];
      }

      我把这个返回值在调用处赋值给一个cv::Point2i对象,如下:

      cv::Point2i BezierPoint(0, 0);
      BezierPoint = recursive_bezier(control_points, t);
      std::cout << "t: " << t << " " << "x: " <<  BezierPoint.x << " " << "y: " <<  BezierPoint.y << std::endl;

      并且我分别在函数内的返回值前,和调用后的地方打印输出了点的坐标,发现两者并不相同函数内的返回值处的值是正确的,但是函数调用处的值似乎是个很奇怪的其他值。
      并且,如果我用全局变量保存control_points[0],并在cv::Mat中画出来,是可以正确显示结果的。

      请问是不是递归调用的返回值有什么讲究呢?谢谢解答!

      • This topic was modified 4 years, 8 months ago by .J..
    • #4635 Score: 0
      .J.
      Participant

      睡觉的时候突然想通了,递归调用的时候,应该return对自身的调用,即:

      return recursive_bezier(bn_list, t);

      而不是:

      recursive_bezier(bn_list, t);

Viewing 1 reply thread
  • You must be logged in to reply to this topic.