Casteljau的算法 - 实际例子

时间:2011-06-07 21:23:02

标签: c++ objective-c c math

我有一个大约50个点(x,y)的数据集,我想绘制一条平滑的曲线,可以在这些点上尽可能接近。

我听说过Casteljau的样条算法,但是在谷歌上搜索了几个小时后,我无法找到一条我可以使用的代码。

据我所知,要使用这个算法,我必须将我的数据集分成4个点,对吧? 1234 5678等。据我所知,我唯一的问题是找到每组中间的点数。我的意思是,如果我计算点1234的曲线,我已经有了第1点和第4点,我需要计算2和3,对吗?但是如何做到这一点对我来说是一个谜。

我想问你们,如果你们知道C,C ++或Objective-C中的一些代码,它们会根据任意数量的数据集来计算曲线。

我需要的是:我发送代码一个带有数据集的数组,然后我收到一个带有绘图点的数组。

我的数学生锈了。那么,请给我一些实际的例子。不要把我发给有数学理论和方程的页面。看着这些页面让我的大脑受伤......

告诉我如何处理我必须计算bezier的点。

回答你会问一个10岁的孩子......:D

感谢。

1 个答案:

答案 0 :(得分:14)

在C#中怎么样?

private void drawCasteljau(List<point> points) {
            Point tmp;
            for (double t = 0; t <= 1; t += 0.001) { 
                tmp = getCasteljauPoint(points.Count-1, 0, t);
                image.SetPixel(tmp.X, tmp.Y, color);
            }
        }


    private Point getCasteljauPoint(int r, int i, double t) { 
        if(r == 0) return points[i];

        Point p1 = getCasteljauPoint(r - 1, i, t);
        Point p2 = getCasteljauPoint(r - 1, i + 1, t);

        return new Point((int) ((1 - t) * p1.X + t * p2.X), (int) ((1 - t) * p1.Y + t * p2.Y));
    }

从这里开始:

http://protein.ektf.hu/book/export/html/51