Casteljau的算法 - 实际例子

Spa*_*Dog 10 c c++ math objective-c

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

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

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

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

我需要的是:我发送代码与数据集的数组,我收到一个数组与要绘制的点.

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

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

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

谢谢.

Bra*_*ham 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));
    }
Run Code Online (Sandbox Code Playgroud)

从这里:

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