卡斯特尔雅乌算法 - 实际示例

Casteljau's algorithm - practical example

本文关键字:算法 卡斯特      更新时间:2023-10-16

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

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

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

我想问你们,你们是否知道C、C++或Objective-C中的一些代码,这些代码基于任意数量的数据集来计算曲线。

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

我的数学生疏了。所以,请给我一些实际的例子。不要把我送到数学理论和方程式的页面上。看着这些页面让我头疼

只要告诉我该怎么处理我必须计算bezier的点。

就像你问一个10岁的孩子一样回答…:D

谢谢。

在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