开发者

Casteljau's algorithm - practical example

I have a dataset with about 50 points (x,y) and I would like to draw a smooth curve that can pass as closer as possible on those points.

I have heard about Casteljau's algorithm for splines but after hours searching on google I was not able to find a single piece of code I can use.

As far as I understood, to use this algorithm, I have to divide my dataset in groups of 4 points, right? 1234 5678 etc.. and as far as I noticed, my only problem is to find the points in the middle of each group. I mean, if I am calculating a curve for points 1234, I already have points 1 and 4 and I need to calculate 2 and 3, right? But it is a mystery to me how to do that.

I would like to ask you guys if you know some code in C, C++ or Objective-C that comput开发者_开发百科es the curves based on datasets with any amount of number.

What I need is: I send the code an array with the dataset and I receive back an array with the points to draw.

My math is rusty. So, please give me practical examples. Do not send me to pages with math theory and equations. Looking at these pages makes my brain hurt...

Just tell me what to do with the points I have to compute the bezier.

Answer as you would ask a 10 year old child... :D

thanks.


How about in 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));
    }

From Here:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜